C语言:指针(一)

发布时间:2026/7/9 9:37:24

C语言:指针(一) 目录1. 内存和地址2. 指针变量和地址2.1 取地址操作符2.2 指针变量和解引用操作符*2.3 指针变量的大小3.指针变量类型4.指针运算4.1 指针与整数4.2 指针与指针1. 内存和地址在计算机中每一个内存单元都存在编号。有了编号CPU就可以快速找到一个内存空间。因此我们可以简易理解为内存单元的编号地址指针。在代码中我们可以通过地址快速找到对象。2. 指针变量和地址2.1 取地址操作符那么我们该如何获取一个对象的地址呢这里就要引入取地址操作符。通过以下方式就可以获取并打印变量a的地址了#includestdio.h int main() { int a 10; printf(%p\n, a); return 0; }需要注意的是打印地址需要用输出符 %p 。2.2 指针变量和解引用操作符*获取了地址就有存储的必要。在此我们可以使用指针变量来存储地址。如下所示#includestdio.h int main() { int a 10; int * pa a; return 0; }此时int *表示的是指针变量pa其中存储的是a的地址。拆开来看int表示的是指针所指向的对象是整型(int)而*表示的是该变量为指针变量。同理char*表示的是指向字符类型的指针变量。那么如何将地址还原为原来的数据呢在这里就要引用解引用操作符*。如图#includestdio.h int main() { int a 10; int * pa a; int A * pa; * pa 0; return 0; }其中* pa的就是对pa进行解引用此时* pa也就等价于a变量。提问代码执行结束后a和A对应的值分别是多少答案a0 A102.3 指针变量的大小简而言之指针变量的大小与类型无关在相同的平台下其大小都是相同的。例如在32位操作系统中大小为4个字节在64位操作系统中大小为8个字节。3.指针变量类型在指针中指针变量类型主要作用分为以下三点1. 决定指针解引用时可访问的字节个数。例如char*的解引用仅能访问1个字节而int*的解引用可以访问4个字节。2. 决定指针向前或向后移动的“距离”。该点在指针与整数的运算中详细说明3. 通过void*来接收任意类型的指针但是该类型的指针无法进行指针的加减或者解引用运算需要通过强制类型转换来实现。4.指针运算4.1 指针与整数由于数组在内存中是连续存放的因此可以在第一个元素地址的基础上加减一个整数从而找到数组后续中的所有元素。如下#includestdio.h int main() { int arr[5] {1, 2, 3, 4, 5}; int * p arr; for(int i0; i5; i) { printf(%d , *(pi)); } return 0; }在这段代码中随着i的递增pi所指向的对象也随之后移。4.2 指针与指针由数组中数据连续存放的规律同理指针与指针的运算可以计算一个数组中的元素个数#includestdio.h int main() { char arr[7] abcde; int sz sizeof(arr) / sizeof(arr[0]); char * p arr; //p为arr数组首元素地址 for(int i0; isz; i) { if(arr[i] ! \0) { p; } } printf(%d, p-arr); return 0; }执行的结果为5由此可见通过 sizeof(arr) / sizeof(arr[0]) 或 p - arr 都可以得到数组中元素个数。

相关新闻