a和&a的区别、二维数组的本质及多维数组
1 a和&a的区别
int a[10] = {1,2};//其他初始化为0 a代表数组首元素的地址,不是整个数组的地址 &a表示整个数组的地址 &a,a代表的数据类型不一样 &a数组类型int[10] a 数组首元素的类型
2 数组指针的用法
int i=0;//循环变量 int a [5] = {3, 4, 5, 6, 2}; //直接定义一个数组指针 int (*p)[5] = &a; for (i=0; i<5; i++) { printf("%d\n", (*p)[i]); }
3 二维数组的本质
结论:二维数组名charmyArray[3][5]是一个数组指针,char (*)[5]
#include "stdio.h" #include "stdlib.h" int main() { int i,j;//循环变量 int k=0; char myArray[3][5];//myArray是一个数组指针 for (i=0;i<3; i++) { for (j=0; j<5; j++) { myArray[i][j]=k++; } } for (i=0;i<5; i++) { printf("%d ", (*myArray)[i]);//输出 0,1,2,3,4 } system("pause"); return 0; }
4 二维数组的三种内存模型
int printf2Array_1(char myArray[3][10], intiNum) { int i = 0; for (i=0; i<iNum; i++) { printf("%s \n",myArray[i]); } return 0; } intprintf2Array_2(char myArray[][10], int iNum) { int i = 0; for (i=0; i<iNum; i++) { printf("%s \n",myArray[i]); } return 0; } intprintf2Array_3(char (*myArray)[10],int iNum) { int i = 0; for (i=0; i<iNum; i++) { printf("%s \n",myArray[i]); } return 0; }
5 多维数组
1 )不管是几维数组,都是线性存储的。所以会存在多维数组做函数参数,退化问题。
2 )多维数组做函数参数二维数组,能勉强表达出来。但是三维数组,四维数组,,就表达不出来了。
结论:指针做函数参数,有效内存维数,只到2级。如果你看到3级指针 4级指针,它表示的不是内存的维数。
数组参数 等效的指针参数 一维数组 chara[30] 指针 char* 指针数组 char*a[30] 指针的指针 char **a 二维数组 chara[10][30] 数组的指针 char(*a)[30]
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。