- 1,加减整数
- 2,关系运算
- 3,指针作差
- 4,指针与数组
- 5,多级指针
指针加一,对于数组来说是索引加一。
因为是顺序存储的。
int a[]={1,2,3}
a:第一个元素的指针
a+1:第二个
a+2:第三个
*a:第一个元素的指针指向
*(a+1)
*(a+2)
#includeint main() { int arr[] = {111, 222, 333}; printf("%dn", *arr); printf("%dn", *(arr + 1)); printf("%dn", *(arr + 2)); return 0; }
效果:
2,关系运算对数组来说,后面元素的内存地址是逐渐变大的。
用关系运算可以更方便地遍历。
#includeint main() { int arr[] = {111, 222, 333, 444, 555, 666}; int len = sizeof arr / sizeof arr[0]; for (int *p = arr; p < arr + len; p++) { printf("%dn", *p); } return 0; }
效果:
3,指针作差在数组中,比较两个元素的相对位置。
#includeint main() { int arr[] = {111, 222, 333, 444, 555, 666}; printf("%ldn", arr - (arr + 3)); return 0; }
效果:
有人说,这不是废话么,arr-arr-3就是-3呀。
雀食。。。
那我换一种写法。
#includeint main() { int arr[] = {111, 222, 333, 444, 555, 666}; printf("%ldn", &arr[0] - &arr[3]); return 0; }
效果还是-3。
当我有同一数组内,任意两个指针时,由这种方法可以判断相对位置。
数组名是首个元素的指针。
#includeint main() { int arr[] = {111, 222, 333, 444, 555, 666}; printf("%dn", arr[0]); printf("%dn", *arr); printf("%dn", *&arr[0]); return 0; }
效果:
5,多级指针指针是类型,有指向地址。
那就有指针,指向指针。
那就。。。
有,更多层的套娃。
二级指针:指向指针的指针。
#includeint main() { int a = 3; printf("%dn", a); int *b = &a; int **c = &b; **c = 7; printf("%dn", a); return 0; }
效果:



