c语言 指针与二维数组
#include <stdio.h>int main()
{
int array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int (*p) = (int (*))&array;
printf("%d\n", p);
return 0;
}
int (*p) = (int (*))&array;
这个代码等号的右边怎么将 array 这个一位数组重新划分成 3 * 3 的二维数组的?有点理解不了,求解! 在C语言中,数组是顺序排列,数组名实际上就是一个地址,使用数组的初始地址是可以改变行列长度的,甚至还可以改变维度。
给你举个例子:
#include <stdio.h>
void func(int b[]);
void func1(int c[])
{
printf("c=%d\n", c);
}
void func(int b[])
{
printf("b=%d\n", b);
}
int main(void)
{
int a = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
func(a);
func1(a);
return 0;
}
运行结果:
b=9
c=9 数组是一段连续的内存,数组名是内存的首地址,array只是把这个首地址交给p 昨天回答另一个人时举过这个例子,假如array数组的9个元素存放在10001到10036这段内存上,只要访问内存10001就能拿到1,访问10005就能拿到2……访问10033就能拿到12。array传值是把10001这个内存地址传给p,p现在是个数组指针,按照自己的规则去访问这段内存即可,p会找到10001,p找到10005,p找到10009,p找到10013……这里p则找到10033拿出里面的9 倒戈卸甲 发表于 2020-4-24 17:20
昨天回答另一个人时举过这个例子,假如array数组的9个元素存放在10001到10036这段内存上,只要访问内存1000 ...
感谢!!
页:
[1]