在c语言中,有如下式子:int a[5],*pa=a; pa+=2; 他说:*pa=a+2*2=a+4,而不是=a+2
来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:综合作业 时间:2024/07/13 01:22:18
在c语言中,有如下式子:int a[5],*pa=a; pa+=2; 他说:*pa=a+2*2=a+4,而不是=a+2 这是为什么呢?
这个问题,在《c语言程序设计教程》书上有原题,我只是不懂pa为什么等于a+4而不是a+2.可是在后面的章节中,又出现了*(pa+n)和*(a+n)表示为数组的各元素即等效于
a[n].为什么会矛盾呢?而且书上有这样的一句话:数组指针变量向前或向后移动一个位置,和地址加1或减1在概念上是不同的.何解?
这个问题,在《c语言程序设计教程》书上有原题,我只是不懂pa为什么等于a+4而不是a+2.可是在后面的章节中,又出现了*(pa+n)和*(a+n)表示为数组的各元素即等效于
a[n].为什么会矛盾呢?而且书上有这样的一句话:数组指针变量向前或向后移动一个位置,和地址加1或减1在概念上是不同的.何解?
![在c语言中,有如下式子:int a[5],*pa=a; pa+=2; 他说:*pa=a+2*2=a+4,而不是=a+2](/uploads/image/z/2970588-12-8.jpg?t=%E5%9C%A8c%E8%AF%AD%E8%A8%80%E4%B8%AD%2C%E6%9C%89%E5%A6%82%E4%B8%8B%E5%BC%8F%E5%AD%90%EF%BC%9Aint+a%5B5%5D%2C%2Apa%3Da%3B+pa%2B%3D2%3B+%E4%BB%96%E8%AF%B4%EF%BC%9A%2Apa%3Da%2B2%2A2%3Da%2B4%2C%E8%80%8C%E4%B8%8D%E6%98%AF%3Da%2B2)
注意 pa+n指的是pa指向对象+n,也就是指向后面第n个对象.
题目中的a+4意思应该是a的地址+4,比方说原来pa = a = (short *)0x100,现在pa+2就是0x104,
也就是a地地址上+4,
但是实际上,如果在程序中写a+2,实际上和pa+2相等的,因为a的类型大小本身就是2,所以感觉是你的理解没有错,书上也没有错,但书上的意思表达不清,一句话:
((unsigned long) a) +4 = (unsigned long) (a+2)
你理解的a+2,何书上说的a+4是一个值
题目中的a+4意思应该是a的地址+4,比方说原来pa = a = (short *)0x100,现在pa+2就是0x104,
也就是a地地址上+4,
但是实际上,如果在程序中写a+2,实际上和pa+2相等的,因为a的类型大小本身就是2,所以感觉是你的理解没有错,书上也没有错,但书上的意思表达不清,一句话:
((unsigned long) a) +4 = (unsigned long) (a+2)
你理解的a+2,何书上说的a+4是一个值
在c语言中,有如下式子:int a[5],*pa=a; pa+=2; 他说:*pa=a+2*2=a+4,而不是=a+2
在C语言中,有如下的写法:int a = 5; int *pa; pa = &(a + 1);
C语言指针 int *pa[3]={a[0],a[1],a[2]};
C++中,int a[][3]={{1,2,3},{4,5,0}},(*pa)[3]; pa = a,求Pa中各值和指向
c语言中,如果是二维或多维数组用指针加减运算,那算哪个?如 int a[5][5],*pa; pa=a;pa+2;那结果
C语言若已定义:int a[5]={1,2,3,4,5},*pa=a;下列叙述错误的是()
您好,请问 int a =10; int *pa; *pa=&a 和 pa=&a 有啥不同
如图,在矩形ABCD中,AB=2,BC=a,又PA垂直面ABCD,PA=4,
C指针中,int a,b;int pa,pc;*pa= ﹠a,与﹡pc=b有什么区别?
在四面体PABC中,PA,PA,PA两两垂直,设PA=PB=PC=a,求点P到平面ABC的距离
PA切圆O于点A,割线PC经过圆心交圆O于B,C两点,若PA=4,PB=2,则tanP等于多少
一个关于指针的问题 已知有定义“int x,a[]={15,17,19},*pa=a;”,在执行“x=*pa++;”后,