main( ){int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p-2;//*p=&a[3]把a中的3索引号地址给指针p,3索引号处为4,因为索引是从0算起//*q=p-2把p的地址减2个int位,即1处的索引号地址给指针q,1处的索引号处的值为2printf("%d\n",*p+*q);//*p+*q的值,...
它的类型为数组类型,(int*)(&a+1)将其强制转换成整型指针赋值给*ptr,并指向了数组界外,最后用*(ptr-1)又指向了界内的最后一个元素5。假如:int a[8] = {1,2,3,4,5,6,7,8};int *ptr = (int*)(&a+1);printf("%d %d" , *(a+1), *(ptr-1) );结果就是2 8 这...
二维数组,两行三列,一个花括号是一行,所以,列成矩阵的形式就是:0 1 2 3 4 5 因为数组下标是从0开始的,所以a[1][1]为4。a
首先需要明白的是,自增自减的操作符比解引用操作符优先级高。对于A,相当于p = p + 2, *p, p++,返回的是第二步的*p,是正确答案。对于B,为p = p + 2, ++p, *p, 返回的是第三步的结果,是4 C肯定是错误的。D,为++(*p),返回的是2,*p代表的是a[0],这个表达式相当于++a[0...
输出结果:3 5 7 int a[3][3]={1,2,3,4,5,6,7,8,9}; 声明了一个3*3的二维数组。循环一共执行三次。第一次:k = 0, 输出 a[0][2],也就是3;第二次:k = 1,输出 a[1][1],也就是5;第三次:k = 2,输出 a[2][0],也就是7.
答案A.数组定义是a[0]=1,a[1]=2,a[2]=3, ...,a[9]=10A. p += 2使p指向a[2], *(p++)表示先取*p的值, 然后p增加1(指向a[3]), 所以取得的值是a[2]=3B. p += 2使p指向a[2], *++p表示先p增加1(指向a[3]),然后取*p的值,所以是a[3]=4C. p += 3使p指向a...
不可以啊!p=a就是p指向了数组a,也就是指向了a[0]。而&a是数组名a的地址,得用**p才能指向a。a
【答案】:D 解析:通常,引用一个数组元素可以用下标法,如a[p-a]形式,或指针法,如*(&a[i])的形式。本题中a[9]=9,a[10]显然超出了数组范围,注意,数组的下标是从0开始的。
【答案】:D 解析:数组和指针的关系非常密切,因为数组名称单独使用是表示数组的首地址。故可用的表示可能是a[i],p[i],*(p+i),同样&(a[i])表示地址,因此*(&a[i])等同于a[i]。本题答案为D。
因为数组的下标是从0开始的,也就是说a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[5]=6,a[6]=7,a[7]=8,a[8]=9,a[9]=10。所以B不对;p 和 a 都是指向数组a说地址的指针,它们指向的都是a[0];a[p-a],因为p=a=a数组的首地址,所以 p-a =0,a[p-a]= a[0]。不...