类型不匹配,才需要强制类型转换,更简单地说编译不过,强制转化就能编译过!a 不是 int ** 类型的 ,虽然一维数组的数组名是一个指针 ,但是二维数组却不尽其然 ,因为它所指向的东西是有大小的 ,具体的来说 ,这个 a 是 int[3][3] 类型的 , 编译器需要知道要操作的单元的大小,a...
char a[]={0,1,2,3,4,5};这样的赋字符串正确吗?当然不正确,虽然编译可过。但a中的字符却不是012345,自己跟踪一下就知道了。char a[5]="0123";这个应该是对的。个
都正确,你要知道,数据在内存当中的存储方式。你的*(*(a+1)+2)就是一行二列的元素,那就是6.而*(*(p+5))就是偏移量为5的那个元素,还是6啊。你的数组虽然是二维数组,但在内存当中还是以顺序的方式存放数据的。了解了就知道怎么回事了。 (提醒,别忘了数组是从0开始的,就是0行...
题目有问题,p的值是多少?式子*p=a+4;若没有对p赋值,直接用*p是错误的,若题目是 int a[10]={1,2,3,4,5,6,7,8,9,10}, p=a+4;则 (++p)=6 分析:p=a+4,即相当于p=&a[4]++p 则p=&a[5],所以*(++p)=*(&a[5])=a[5]=6 ...
(*ptr)[3]=a,数组指针只有3行,数组a有四行,所以(*ptr)[0]={1,2,3,4},(*ptr)[1]={5,6,7,8},(*ptr)[2]={9,10,11,12},所以*((ptr+1)[2])表示的是(*ptr)[2]里面的第二个元素就是10((ptr+1)[2])这种用法是不对的,数组的下标相当与解引用,比如a[2]=*(a+2)...
例如:include <stdio.h>int main(){ char *p=0; char a[]={1,2,3,4,5}; p=a; //p指向 数组a的地址 ,这时 a[2] =3; *(p+2)+=2; //这时, a[2]=5;}先看中间那个运算符 += ,a+=2的意思是a=a+2在看左边*(p+2) 有*号说明p可以当作指针 并且如果p...
p[0]=&a[0] ,p[0]指向a[0]m=1时,p[1]=&a[3] ,p[1]指向a[3]m=2时,p[2]=&a[6] ,p[2]指向a[6]m=3时,p[3]=&a[9],p[3]指向a[9]]m=4时,p[4]=&a[12],p[4]指向a[12]p[3][2]);相当于p[3]+2 因为p[3]指向a[9],故p[3][2]指向a[11]a[11...
首先需要明白的是,自增自减的操作符比解引用操作符优先级高。对于A,相当于p = p + 2, *p, p++,返回的是第二步的*p,是正确答案。对于B,为p = p + 2, ++p, *p, 返回的是第三步的结果,是4 C肯定是错误的。D,为++(*p),返回的是2,*p代表的是a[0],这个表达式相当于++a[0...
十六进制加法和十进制加法类似,满16进1。194+12,最低位4+2=6,次低位9+1=a(相当于十进制的10)。另外想确认一下,楼主使用的机器int型是2个字节大小吗?
数组表示法: p[2]指针表示法: *(p+2)以上也可以用数组a替代,都是等价的