#include <stdlib.h>
void test(){
int *l[4];
int (*q)[4];
printf("%d %d %d %d\n", sizeof(l), sizeof(*l), sizeof(q), sizeof(*q));
}
void main()
{
int a[3][4]={{1,2,3,4}};
int (*p)[4];
test();
p=a;
p[0]=a[1];
printf("%d\n", *(*p+3));
}
7 个解决方案
#1
sizeof(l) = 16; 整个数组长度
sizeof(*l) = 4;数组内第一个元素,指针
sizeof(q) = 4;指针
sizeof(*q) = 4;指针
*(*p+3) = 3
sizeof(*l) = 4;数组内第一个元素,指针
sizeof(q) = 4;指针
sizeof(*q) = 4;指针
*(*p+3) = 3
#2
错了
sizeof(*q) = 16;
sizeof(*q) = 16;
#3
p[0]=a[1]; //这个可以吗?
sizeof与编译器有关的
printf("%d %d %d %d\n", sizeof(l), sizeof(*l), sizeof(q), sizeof(*q));
32位:结果是16 4 4 16
64位(VS)32 8 8 16
sizeof与编译器有关的
printf("%d %d %d %d\n", sizeof(l), sizeof(*l), sizeof(q), sizeof(*q));
32位:结果是16 4 4 16
64位(VS)32 8 8 16
#4
*(*p+3) = 4...犯困啊。。sizeof(*q)表示数组长度。
#5
(*p)[0]=a[0][1];
#6
上面把sizeof解释清楚了,我就试着分析下p[0] = a[1]的错误。
int (*p)[4];
p = a;
p[0] = a[1]; //因为p是指向数组的指针。p[0]也就是&a[0][0],它是右值,试图改变数
//组的地址,无法对它赋值。
int (*p)[4];
p = a;
p[0] = a[1]; //因为p是指向数组的指针。p[0]也就是&a[0][0],它是右值,试图改变数
//组的地址,无法对它赋值。
#7
呵呵,说一下我自己的思路吧!
sizeof(l)中的l代表数组的首地址,那么输出的就是整个数组的大小,等于4*sizeof(int)
sizeof(*l)中的*l相当于*(&l[0]),那么实际上它就是l[0]的size
sizeof(q)中的q是一个二级指针(即指针的指针),所以说它等于一个指针的size(在32位系统下是32)
sizeof(*q)中的*q相当于一维数组int[4]的首地址,所以它输出的是整个一维数组的大小,等于4*sizeof(int)
关于p[0]=a[1];
这其实是错误的用法,虽然p是指针变量,p[0]也是指针,但是p[0]却是常指针,不能改变指向。
sizeof(l)中的l代表数组的首地址,那么输出的就是整个数组的大小,等于4*sizeof(int)
sizeof(*l)中的*l相当于*(&l[0]),那么实际上它就是l[0]的size
sizeof(q)中的q是一个二级指针(即指针的指针),所以说它等于一个指针的size(在32位系统下是32)
sizeof(*q)中的*q相当于一维数组int[4]的首地址,所以它输出的是整个一维数组的大小,等于4*sizeof(int)
关于p[0]=a[1];
这其实是错误的用法,虽然p是指针变量,p[0]也是指针,但是p[0]却是常指针,不能改变指向。
#1
sizeof(l) = 16; 整个数组长度
sizeof(*l) = 4;数组内第一个元素,指针
sizeof(q) = 4;指针
sizeof(*q) = 4;指针
*(*p+3) = 3
sizeof(*l) = 4;数组内第一个元素,指针
sizeof(q) = 4;指针
sizeof(*q) = 4;指针
*(*p+3) = 3
#2
错了
sizeof(*q) = 16;
sizeof(*q) = 16;
#3
p[0]=a[1]; //这个可以吗?
sizeof与编译器有关的
printf("%d %d %d %d\n", sizeof(l), sizeof(*l), sizeof(q), sizeof(*q));
32位:结果是16 4 4 16
64位(VS)32 8 8 16
sizeof与编译器有关的
printf("%d %d %d %d\n", sizeof(l), sizeof(*l), sizeof(q), sizeof(*q));
32位:结果是16 4 4 16
64位(VS)32 8 8 16
#4
*(*p+3) = 4...犯困啊。。sizeof(*q)表示数组长度。
#5
(*p)[0]=a[0][1];
#6
上面把sizeof解释清楚了,我就试着分析下p[0] = a[1]的错误。
int (*p)[4];
p = a;
p[0] = a[1]; //因为p是指向数组的指针。p[0]也就是&a[0][0],它是右值,试图改变数
//组的地址,无法对它赋值。
int (*p)[4];
p = a;
p[0] = a[1]; //因为p是指向数组的指针。p[0]也就是&a[0][0],它是右值,试图改变数
//组的地址,无法对它赋值。
#7
呵呵,说一下我自己的思路吧!
sizeof(l)中的l代表数组的首地址,那么输出的就是整个数组的大小,等于4*sizeof(int)
sizeof(*l)中的*l相当于*(&l[0]),那么实际上它就是l[0]的size
sizeof(q)中的q是一个二级指针(即指针的指针),所以说它等于一个指针的size(在32位系统下是32)
sizeof(*q)中的*q相当于一维数组int[4]的首地址,所以它输出的是整个一维数组的大小,等于4*sizeof(int)
关于p[0]=a[1];
这其实是错误的用法,虽然p是指针变量,p[0]也是指针,但是p[0]却是常指针,不能改变指向。
sizeof(l)中的l代表数组的首地址,那么输出的就是整个数组的大小,等于4*sizeof(int)
sizeof(*l)中的*l相当于*(&l[0]),那么实际上它就是l[0]的size
sizeof(q)中的q是一个二级指针(即指针的指针),所以说它等于一个指针的size(在32位系统下是32)
sizeof(*q)中的*q相当于一维数组int[4]的首地址,所以它输出的是整个一维数组的大小,等于4*sizeof(int)
关于p[0]=a[1];
这其实是错误的用法,虽然p是指针变量,p[0]也是指针,但是p[0]却是常指针,不能改变指向。