Moh*_*gal 2 c arrays syntax pointers
我在C中的指针和数组声明的基础知识中感到困惑.我想知道以下两个语句之间的区别,除了在seconed语句中将数组的基地址分配给ptr.
int a[2][3]= { (1,2,3),(4,5,6)};
int (*ptr)[3] = &a[0];
Run Code Online (Sandbox Code Playgroud)
请举例说明.[3]对第2行的R侧有什么影响?
1.二维数组:
int a[2][3]= { {1,2,3},{4,5,6}};
Run Code Online (Sandbox Code Playgroud)
在内存中使用此语句,你有2x3整数,所有都在内存中相邻.我想你知道如何访问它们,但是如果你没有,我会澄清它:
a[0][0] : 1
a[0][1] : 2
a[0][2] : 3
a[1][0] : 4
a[1][1] : 5
a[1][2] : 6
Run Code Online (Sandbox Code Playgroud)
2.指向数组的指针:
int (*ptr)[3] = &a[0];
Run Code Online (Sandbox Code Playgroud)
ptr指向int [3]内存块.所以你只能将它分配给int [3]类型:
ptr= &a[0];
ptr= &a[1];
Run Code Online (Sandbox Code Playgroud)
不同之处在于此指针没有自己的内存,您必须将其分配给int [3]变量或分配它:
ptr= malloc (2*sizeof(int[3]);
Run Code Online (Sandbox Code Playgroud)
这样你可以使用ptr指向的内存,如果你用这种方式初始化ptr:
for(int j=0; j<2; j++)
for(int i=0; i<3;i++)
ptr[j][i]=i+j*3+1;
Run Code Online (Sandbox Code Playgroud)
这种情况你将拥有相同的int a [2] [3]的内存表示形式,除了这个内存在堆中而不在堆栈中.你总是可以选择重新分配/释放内存并且不删除这个内存一旦你的功能终止.