一、数组与指针有什么关系
(1)地址
数组名就是一个地址,指向一个数组的开端。
从实验结果我们可以看出前三个地址都是一样的,都是数组的开始地址,而最后一个是数组的第二个元素,因为是整型数据,地址加4。
那么0[a] 1[a] 2[a]...n[a]又代表了什么
0[a]=a[0] 1[a]=a[1] n[a]=a[n];
为什么会这样呢 对比上方代码可知:
n[a]=*(n+a) *(n+a)=*(a+n) *(a+n)=a[n];
#include <stdio.h> int main() { int a[5] = { 7,0,8,5,1 }; int *p = a+2; printf("%d\n", *p++); printf("%d\n", *++p); printf("%d\n", (*p)++); printf("%d\n", ++(*p)); }
举例指针在数组中的使用:
#include <stdio.h> int main() { int *p, a[3], i; p = a; for (i = 0;i < 3;i++) scanf_s("%d", p++); printf("\n\n"); for (p = &a[0];p < a + 3;) printf("%d ", *p++); return 0; }
#include <stdio.h> int main() { int a[3][3] = { 1,2,3,4,5,6,7,8,9 }, *p; for (p = a[0];p < a[0] + 9;p++) //p=&a[0][0] printf("%d", *p); return 0; }
#include <stdio.h> int main() { int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; int(*p)[4]; p = a; int i, j; for (i = 0;i < 3;i++) { for (j = 0;j < 4;j++) printf("%d", p[i][j]); printf("\n"); } return 0; }
#include <stdio.h> int *fun(int *x, int *y) { if (*x < *y) return x; else return y; } main() { int a = 7, b = 8, *p, *q, *r; p = &a; q = &b; r = fun(p, q); printf("%d,%d,%d\n", *p, *q, *r); }