(*p)[2]=a表示将p定义为一个指向含2个元素的一维数组的指针变量,那么二维数组就可以看作是一维数组a[3],其中每一个元素都是一个一维数组,a[1]={1,2},a[2]={3,4},a[3]={5,6};则p+2就指向了a[3],*(p+2)是a[3]的首地址,**(p+2)就是a[3]的首元素,即为5。(...
【答案】:C 指针变量可以带下标引用数组元素,其引用规则是:若指针变量p指向了数组a的某元素a[i],则p[0]就是a[i],p[1]就是a[i+1],……以此类推。本题中指针变量p指向了a[2],所以p[0]就是a[2],p[1]就是a[3]……
因为数组的下标是从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]。不...
其实只需要:a[1][2]的表达式是*(*(a+1)+2) 为什么?(地址加数字就是往后移几个后的地址)a指的是这个二维数组名或起始地址 a+1指的是第一行的起始地址 (a+1)加*后指的是第一行第0列的起始地址(因为还有一整行,不能具体到某个值,所以还是地址)(a+1)+2指的是第一行第二列的...
&x[1]取出的是数组里2 的地址。for(i=0;i<=2;i++) 循环了三次,也就是从2+3+4 所以 y=9 有图有真相!!d
int a[3][2]={(0,1),(2,3),(4,5)};int a[3][2]={{0,1},{2,3},{4,5}};两种方式赋值不同,第一种数组的值分别为1,3,5,0,0,0,第二种是0,1,2,3,4,5 应该
[0]就是元素3的指针,*(a+1)[0]就是元素3。(*(a+1))[0]——由1知,*(a+1)是元素3的指针,(*(a+1))[0]就元素3。a[1][0]——不用细说,是第1行(0行起)第0个元素,自然是3。得出结论:当指针p成功指向数组a时,*p与a[0]等价,*(p+1)与a[1]等价,依此类推。
记住一个万能公式就行了:(p + i) = p[i]所以:(p+1) = *(*(p+1)) = *(p[1]) = *(p[1] + 0) = p[1][0] = 5;(*p + 1) = *(*(p + 0) + 1) = *(p[0] + 1) = p[0][1] = 2;所以结果就是3了。(...
程序最开始要求输入x 这个x应该是要插入的元素吧?那怎么会出现这样的语句呢:p->last=x-1;应该是在a出现后,做p->last=a-1;这样改用你说的那组数据测试应该可以了 不过还有一个隐患,就是 for(i=0;i<a;i++){ if(p->data[i]>=x){ b=i;break;} } 这段话,如果现有元素都比x小...
int *p=&a[3];则p = a+3 b = p[5] = *(p+5) = *(a+8) = 9