答案是1,因为P也是一个一维指针,所以根据类型匹配原理只能对应一维a[i]而不能对应一个二维地址,否则需要强制转换,2,q[i]其实也相当于一个int类型指针所以可以对应a[i]3,p是一维指针所以可以对应a[i]一维数组 4,&a[2][1]是a二维数组的第三维第二个元素的地址。
A B C D 14.(14)表达式:(int)((double)9/2)-(9)%2的值是 A)0 B)3 C)4 D)5 A B C D 15.(15)若有定义语句: int x=10;,则表达式x-=x+x的值为 A)-20 B)-10 C)0 D)10 A B C D 16.(16)有以下程序 #include <stdio.h> main() { int a=1,b=0; printf("%d,",b=a+...
int a[4][10],*p,*q[4];a的类型:int [4][10],a是一个有4个元素的一维数组,每个元素又是有10个int型数据的一维数组 本质上 C语言是没有多维数组 的!请楼主记住。所以a的首元素是a[0],a是首元素a[0]的地址,即a = &a[0]千万不要认为a是首元素a[0][0]的地址,而写...
然而,如果尝试在未初始化的情况下直接赋值给p,如int *p = NULL;则是错误的,因为这会导致程序运行时可能的未定义行为或错误。正确的做法是,在使用指针之前确保其指向一个有效的内存地址。例如:int a = 4, b = 3, *p, *q, *w;如果需要初始化指针p,应该先为其分配内存,或指向一个已存在...
也就是int (*p)[10];初始化方面,对于int (*p)[4],正确的形式是int (*p)[4] = &a; 而对于int *p=a,如果a是一个整数,p将指向a,但如果a是数组,则p将指向数组的第一个元素。这里需要注意的是,直接赋值a给p是不正确的,因为这会导致数组的地址被错误地赋值给p,而p应该指向整个数组...
int (*p)[4]=a ; 定义一个行指针,并指向二维数组的第0行(a 在这里表示二维数组的首地址,即第0行的首地址,这和一维数组有些区别) int *q=a[0]; 或者 int *q = &a[0][0]; 这两个效果一样, 都创建了一个简单的整型指针,并指向二维数组第一个元素的首地址,这样的话 指针可以在...
①*p=&a[3],所以*p=4(这个不解释了)②A我们明确一个概念,就是a[10]这串位置是连续的。B假设i=*p(i为p所指的单元格的值)。*p=4,即i=&a[3]=4 Cp-2即p所在的地址往前推2单元格;即i所指的值往前推2单元格,即i=&a[3]往前推2单元格,即&a[1]=2 综上所述4+2=6 ...
a是2维数组首地址,即双重指针常量 p是一维指针,所以不行。非要用的话,可以强制转换 p = (int *)a;
你定义打错了吧。应该是 int m[4]]={10,12,30,9};int m[4]]={10,12,30,9};的意思是定义一个含有4个元素的数组,并给予初始化,初始化后的结果 m[0]=10,m[1]=12,m[2]=30,m[3]=9;当定义了某数组后,就可以引用该数组中的元素了。引用形式为:“数组名[下标]”m是数组名,...
int *p=a;p=&a[0];//因为a=a[0],所以p=a 和p=&a[0]是等价的。p=&a//int *p,p是一个指向int类型的指针,而&a表示的是指向整个数组的指针(取一个数组名得地址所产生的是一个指向数组的指针)。p是int类型的指针,而&a是指向数组的指针,类型不匹配,所以式子是错误的。要想得到...