首页 > 其他分享 >逍遥自在学C语言 | 指针的基础用法

逍遥自在学C语言 | 指针的基础用法

时间:2023-06-16 16:34:17浏览次数:64  
标签:变量 逍遥自在 C语言 int num printf ptr 指针

前言

在C语言中,指针是一项重要的概念,它允许我们直接访问和操作内存地址。

可以说,指针是C语言一大优势。用得好,你写程序如同赵子龙百万军中取上将首级;用得不好,则各种问题层出不穷,有种双拳难敌四手的感觉。

本文将介绍指针的基础知识,包括指针的定义、初始化、访问和运算。

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

  • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、指针的基本概念

指针是一种变量,它存储的是内存地址而不是实际的值。

通过指针,我们可以直接访问和操作内存中存储的数据。下面是指针的基本概念:

int* ptr;  // 声明一个指向整数的指针

在上面的示例中,我们声明了一个名为ptr的指针变量,它可以指向整数类型的数据。

指针变量的类型必须与其指向的数据类型相匹配。

三、声明和初始化指针

要声明指针变量,我们需要使用*符号来指示该变量是一个指针。下面是指针的声明和初始化示例:

int* ptr;    // 声明一个指向整数的指针
int num = 10;  // 声明一个整数变量

ptr = #  // 将指针指向num变量的地址

在上面的示例中,我们声明了一个指向整数的指针ptr,然后将其初始化为变量num的地址,使用&运算符可以获取变量的地址。

四、访问指针和间接引用

通过指针,我们可以访问和修改其指向的变量。使用指针访问变量的值称为间接引用或解引用操作。

下面是访问指针和解引用的示例:

int* ptr;
int num = 10;

ptr = #

printf("变量num的值:%d\n", *ptr);  // 输出:变量num的值:10

*ptr = 20;  // 修改变量num的值

printf("变量num的新值:%d\n", num);  // 输出:变量num的新值:20

在上面的示例中,我们使用*ptr来访问指针所指向的变量num的值,并可以对其进行修改。

五、指针的运算

指针支持一些特定的运算,使得我们能够在内存中进行定位和遍历。

以下是指针的常见运算:

  • 指针的自增和自减运算:使用自增和自减运算符可以将指针移动到下一个或上一个内存位置。
int* ptr;
int nums[] = {1, 2, 3, 4, 5};

ptr = nums;  // 指针指向数组的第一个元素

printf("第一个元素的值:%d\n", *ptr);  // 输出:第一个元素的值:1

ptr++;  // 指针自增,移动到下一个元素

printf("第二个元素的值:%d\n", *ptr);  // 输出:第二个元素的值:2
  • 指针之间的相减运算:可以对两个指针进行相减运算,得到它们之间的距离(以元素个数为单位)。
int* ptr1;
int* ptr2;
int nums[] = {1, 2, 3, 4, 5};

ptr1 = nums;       // 指针1指向数组的第一个元素
ptr2 = &nums[3];   // 指针2指向数组的第四个元素

int distance = ptr2 - ptr1;

printf("两个指针之间的距离:%d\n", distance);  // 输出:两个指针之间的距离:3

通过以上示例,我们可以看到指针的自增、自减和相减运算的应用,它们在遍历数组和计算距离等场景中非常有用。

六、示例代码

下面是完整的示例代码,用于加深对指针的理解,巩固前面所学的知识:

#include <stdio.h>

int main() {
    int num = 10;
    int* ptr = &num;

    printf("变量num的值:%d\n", *ptr);
    *ptr = 20;
    printf("变量num的新值:%d\n", num);

    int nums[] = {1, 2, 3, 4, 5};
    int* p = nums;
    printf("第一个元素的值:%d\n", *p);
    p++;
    printf("第二个元素的值:%d\n", *p);

    int* p1 = nums;
    int* p2 = &nums[3];
    int dist = p2 - p1;
    printf("两个指针之间的距离:%d\n", dist);

    return 0;
}

小结

通过这篇文章,我们学会了

1、指针的基本概念

2、指针的基本用法

标签:变量,逍遥自在,C语言,int,num,printf,ptr,指针
From: https://www.cnblogs.com/Wayne123/p/17485911.html

相关文章

  • 前端学习C语言 - 数组和字节序
    数组本篇主要介绍:一维二维数组、字符数组、数组名和初始化注意点以及字节序。一维数组初始化有以下几种方式对数组初始化://定义一个有5个元素的数组,未初始化inta[5];//定义一个有5个元素的数组,将第一个初始化0,后面几个元素默认初始化为0inta[5]={0};//定义一个......
  • C语言-预处理
    简介C语言编译器在编译程序之前,会先使用预处理器(preprocessor)处理代码。预处理器首先会清理代码,进行删除注释、多行语句合成一个逻辑行等工作。然后,执行#开头的预处理指令。本章介绍C语言的预处理指令。预处理指令可以出现在程序的任何地方,但是习惯上,往往放在代码的开头部分。每......
  • tr069 节点模板定义c语言
    #include<stdio.h>/*Signed*/typedefsignedcharint8_t;typedefshortintint16_t;typedefintint32_t;/*Unsigned.*/typedefunsignedcharuint8_t;typedefunsignedshortintuint16_t;typedefunsignedint......
  • C语言—— void 的使用
    1、voidfunc(inta,char*b)  当函数不需要返回值值时,必须使用void限定,这就是我们所说的第一种情况。2、intfunc(void)  当函数不允许接受参数时,必须使用void限定,这就是我们所说的第二种情况。3、void指针的使用规则void指针可以指向任意类型的数据,就是说可以用任意类型......
  • C语言文件操作函数open、write用法速记
    以前一直都是用fopen、fwrite等高级函数写文件,这次尝试用open、write、close操作文件。代码如下:intret=OB_SUCCESS;intfd=open(config_file,O_WRONLY|O_CREAT|O_TRUNC,S_IRWXU|S_IRWXG|S_IRWXO);staticconstint64_tbuf_len=512;int64_......
  • 面试题:C语言中 printf("%d",sizeof('c')); 结果为什么是4?
    在C语言中,sizeof运算符用于获取数据类型或变量的字节大小。当您使用sizeof('c')时,它会返回字符常量'c'的字节大小。在C语言中,字符常量的类型是int,而不是char。尽管字符常量表示一个字符,但它实际上是以整数形式存储的。因此,sizeof('c')将返回4,即'c'字符常量的字节大小,这是因为......
  • 浅谈C语言指针的运用(函数与指针、数组与指针)
    1.函数与指针一个函数在编译以后会占用一定的内存,在c语言中函数一般是在栈里面,而函数名就是函数在栈中的首地址。那么接下来会讲解如何通过指针调用函数呢?用指针调用函数我们称为函数指针,指针作为一种数据类型,它指向或引用内存中的数据,那么指针同样可以用来存储函数地址(起始地址......
  • 浅谈 .NET 中的对象引用、非托管指针和托管指针
    目录前言一、对象引用二、值传递和引用传递三、初识托管指针和非托管指针四、非托管指针1、非托管指针不能指向对象引用2、类成员指针五、托管指针 前言#本文主要是以C#为例介绍.NET中的三种指针类型(本文不包含对于函数指针的介绍):对象引用、非托管指针、......
  • 【LeetCode双指针】合并两个有序数组,从后向前遍历
    合并两个有序数组https://leetcode.cn/problems/merge-sorted-array/给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数......
  • VScode配置C语言环境
    0.前言运行系统为【Windows11专业版】1.安装VScode 官网下载 VScode或使用电脑自带【MicrosoftStore】(微软商店)下载。2.运行配置VScode3.安装编译器(MinGW-W64GCC)下载地址官网:MinGW-w64蓝奏云:https://hyborn.lanzouw.com/iqb1x0i0wwjc密码:0000下载完成后把压缩......