本文共 1123 字,大约阅读时间需要 3 分钟。
p + 1 的含义并非简单地将一个整数加 1,而是对指针执行操作。这里的 +1 是对指针本身的操作,类似于在内存中移动固定大小的空间。通过不断对指针执行 +1 操作,可以逐个访问数组中的元素。
例如,考虑以下代码:
int a[] = {1, 2, 3, 4, 5};int *p = a;
p
指向数组 a
的第一个元素。p + 1
式式操作将 p
移动到数组下一个元素的位置。运行以下程序可以更直观地观察:
#includeint main() { int a[] = {1, 2, 3, 4, 5}; int *p = a; printf("p = %p\n", p); printf("p+1 = %p\n", p+1); printf("*p = %d\n", *p); // *p 即 a[0] printf("*(p+1) = %d", *(p+1)); // *(p+1) 即 a[1] return 0;}
输出结果如下:
p = 000000000062FE00p+1 = 000000000062FE04*p = 1*(p+1) = 2
p + n
或 p -= n
类似于 p += n
的操作,分别用于在内存中向前或向后移动 n
个单位。p++
和 --p
实则是 p = p + 1
和 p = p - 1
的意思。int a[] = {1, 2, 3, 4, 5};int *p = &a[0];int *p1 = &a[4];
p
指向 a[0]
,p1
指向 a[4]
p1 - p = 4
,这等价于两个指针之间的地址差除以 sizeof(int)
,即 4 / 4 = 1
。所有指针的大小相同,因为它们都存储内存地址。但是不同的指针类型之间不能互相赋值,例如 int *p = (char*)0x12345678;
会导致类型错误。
指针只能在动态分配的内存区域内使用,避免越界操作,以免导致程序崩溃或者数据丢失。
malloc
或 calloc
函数。通过对指针的操作,我们能够方便地在内存中定向存取和操作数据,这为程序开发提供了极大的灵活性。
转载地址:http://lkakk.baihongyu.com/