问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

一文轻松拿捏C语言的指针的基础使用

创作时间:
作者:
@小白创作中心

一文轻松拿捏C语言的指针的基础使用

引用
1
来源
1.
https://developer.aliyun.com/article/1653498

计算机中程序的运行都是在内存中进行的,变量也是在内存中分配的空间,且不同类型的变量占用不同大小的空间。那么如何访问内存中变量存储的数据呢?有两种方式:直接访问和间接访问。直接访问是直接使用变量名进行的访问,而间接访问则是通过指针来实现。

1. 指针概念

指针是C语言中最重要的概念之一,也是最难理解的概念之一。要想掌握C语言,就需要深入地了解指针。

指针就是内存地址,使用指针访问变量,就是直接对内存地址中的数据进行操作。具体来说:

  • 变量:命名的内存空间,用于存放各种类型的数据。
  • 变量名:变量名是给内存空间取的一个容易记忆的名字。
  • 变量值:在变量单元中存放的数据值。
  • 变量的地址:变量所使用的内存空间的地址,即指针。
  • 指针变量:一个变量专门用来存放另一变量在内存中数据的地址(即指针),则它称为“指针变量”。我们可以通过访问指针变量达到访问内存中另一个变量数据的目的。

上图中,地址0x00000001是变量i的指针,i_pointer就是一个指针变量。

2. 指针变量定义

指针变量的定义格式如下:

数据类型 *指针变量名 [=初始地址值];
  • 数据类型是指针变量所指向变量数据类型。可以是int、char、float等基本类型,也可以是数组等构造类型。
  • 字符*用于告知系统这里定义的是一个指针变量,通常跟在类型关键字的后面。比如,char表示一个指向字符的指针,float表示一个指向float类型的值的指针。

举例:

int *p;  //读作:指向int的指针”或简称“int指针”

这是一个指针变量,用于存储int型的整数在内存空间中数据的地址。

3. 指针的应用场景

指针主要应用于以下场景:

  • 使用指针访问变量或数组的元素。
  • 应用在数据结构中,如链表、树等。

4. 指针的运算

取址运算符:&

取址运算符使用“&”符号来表示,作用是取出指定变量在内存中的地址。其语法格式如下:

&变量

举例:

int num = 10; 
printf("num = %d\n", num); // 输出变量的值。 num = 10
printf("&num = %p\n", &num); // 输出变量的内存地址。&num = 00000050593ffbbc

说明:

  1. 在输出取址运算获得的地址时,需要使用“%p”作为格式输出符。
  2. 这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)。

指针变量的赋值

  1. 指针变量中只能存放地址(指针),不要将一个整数(或任何其它非地址类型的数据)赋给一个指针变量。
  2. C语言中的地址包括位置信息(内存编号,或称纯地址)和它所指向的数据的类型信息,即它是“带类型的地址”。
  3. 为了避免未初始化指针变量带来的问题,通常给指针变量赋初始值为0(或NULL),并把值为0的指针变量称为空指针变量。

通过指针变量修改指向的内存中的数据:

int main() {
    int num = 10, *ptr;
    ptr = #
    printf("%d\n",num);
    scanf("%d", ptr); //等价于scanf("%d", &num);
    printf("%d\n",num);
    return 0;
}

取值运算符

在C语言中针对指针运算还提供了一个取值运算符,使用“*”符号表示。其作用与&相反,根据一个给定的内存地址取出该地址对应变量的值。也称为解引用符号。其格式如下:

*指针表达式

其中,“”不同于定义指针变量的符号,这里是运算符。“指针表达式”用于得到一个内存地址,与“”结合以获得该内存地址对应变量的值。

举例:

int main() {
    int a = 2024;
    int *p;
    p = &a;
    printf("%p\n",&a); //0000005cc43ff6d4
    printf("%p\n",p);  //0000005cc43ff6d4
    printf("%d\n", *p); //2024
    return 0;
}

其实,指针的运算还有很多,比如与整数的加减、自增自减等等,这里就不再一一叙说啦。

希望每天都可以学习一个知识点!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号