谭浩强 C语言问题:请问以下两句一样吗

来源:百度知道 编辑:UC知道 时间:2024/09/23 23:33:31
1.int a[]4; //a有4个元素,每个元素为整型
2.int (*p)[4] //*p有四个元素,每个元素为整型.也就是p所指的对象是有4个整型元素的数组.

请问:int *p;
int (*p)[1];
一样吗????????

不一样 int *p p相当于一个无符号整形数里面的值是一个地址
int (*p)[1]; 这里的p也相当于一个无符号整数,但是他里面存放一个一维数组的地址。

比如:
int *p;
int (*ptr)[1];
int i = 8;
int arr[1] = {0};

p = &i;
ptr = &arr;

*p == 8; /* p 指向一块内容为8的内存 */
(*ptr)[0] == 0; /* ptr指向一个一块只有一个元素的数组,且元素值为0*/

int a=10;
int *p=&a;/*指向整数的指针*/
那么*p是一个整数
*p = 10;

int a[1]={10};
int (*p)[1]=a; /*指向数组的指针*/
那么*p是一个数组
(*p)[0]=10;

问题变为:只有一个元素的数组和元素本身是否相同?
答案显然是不相同,虽然他们占用相同大小的存储空间,可是访问方式截然不同

当然不一样,a是常量,不能改变,p是变量,可以改变

不一样.上面的p可以不用强制转换就指向任一int型数组,下面的p不经过强制转换的话只能指向int[1]类型的数组

不一样。。
一样为什么要分2种写法阿

int *p 是一个指针,指向一个整形

nt (*p)[1]; 是一个指向1个长度为1的整形数组

int (*p)[4]它指向整形2维数组长度是4。
“长度”表示二维数组分解为多个一维数组时, 一维数组的长度,也就是二维数组的列数.

不一样啊。int *p表示一个一维数组或者是指向一个整形数的一个指针。而int (*p)[1]表示一个二维的数组。