【C/C++】深入理解指针和数组的关系
2013-07-13 17:26
381 查看
对数组名进行取地址运算
int a[] = {1,2,3}; int (*p)[3] = &a; //注意左值
对数组名取地址,得到的指针为指向整个数组的指针。
形参数组
形参为数组时勿须带数组长度,因为计算机不会处理,如果需要传数组长度,需要另外加参数。一维数组指针
#include <stdio.h> //void array_add(int a[][], int len) int array_add(int (*p)[3], int row, int lines) { int i,j; int result = 0; for(i=0; i<row; i++) for(j=0; j<lines; j++) result += p[i][j]; return result; } int main(void) { //一个二维数组可以看做是两个一维数组,而a[0]和 a[1]分别是这两个一维数组的名字。 int a[2][3] = {1,2,3,4,5,6}; int (*p[2])[3] = {a, a+1}; int (*p1)[3] = a;//数组的名字代表指向数组首元素的首地址(这里二维数组的首元素是一个一维数组) int (*p2)[2][3] = &a;//对数组名取地址之后,其指针指向整个数组,在这里p2指向整个二维数组,若p2+1,则跳过24个字节,即整个数组。 int *p3 = a[0]; int (*p4)[3] = &a[0]; int b = a[0][0]; int *p5 = *a; //在这里a可以看做是指向行的地址,加*之后变成了指向列的地址。(这种描述方式只是便于理解) int result = 0; result = array_add(a, 2, 3); printf("result = %d\n", result); printf("a[1][1] = %d\n", *(*(a+1)+1)); printf("a[1][1] = %d\n", *(*(p1+1)+1)); printf("a[1][1] = %d\n", p1[1][1]); printf("a[1][1] = %d\n", (*p2)[1][1]); printf("a[1][1] = %d\n", *(p3+4)); printf("a[1][1] = %d\n", *(*(p4+1)+1)); return 0; }
View Code
相关文章推荐
- 深入理解 C++ 指针(五)---数组和指针的关系
- 【C/C++】一道试题,深入理解数组和指针
- 深入理解C/C++数组和指针
- 数组名和指针的深入理解(C++)
- 有关sizeof 数组名的问题 数组名和指针的深入理解(C++)
- 深入理解C/C++数组和指针
- 深入理解C/C++数组和指针
- 深入理解C/C++数组和指针
- 深入理解C/C++数组和指针
- 深入理解C++中的指针和多维数组
- 数组名和指针的深入理解(C++)
- 深入理解C/C++数组和指针
- 深入理解 C++ 指针(六)---指针和结构类型的关系
- 数组名和指针的深入理解(C++)
- 深入理解C/C++数组和指针
- 深入理解 C++ 指针(七)---指针和函数的关系
- 数组名和指针的深入理解(C++)
- 深入理解C/C++数组和指针
- C/C++数组名与指针区别深入探索
- 深入理解数组指针与指针数组的区别