黑马程序员技术交流社区
标题:
数组中的+问题
[打印本页]
作者:
桑托尔
时间:
2014-4-24 10:09
标题:
数组中的+问题
本帖最后由 桑托尔 于 2014-4-25 08:18 编辑
由一道题引发的问题。
设有定义int a[]={1,3,5,7,9},*p=a;结果为7的表达式是()。
A) *(p+3)
B) *(p+4)
C) *p+3
D) *p+4
为什么有的时候指向数组中某个元素 ,是用"+"来完成的,有的时候用[ ]。这个不理解
还有就是加号的话,有什么使用的注意和细节,望诸位哥哥姐姐指教!
{:3_64:}{:3_64:}
作者:
peku
时间:
2014-4-24 10:47
用[]其实是直接访问数组中的元素,比如a[0]相当于数组第一个数的变量名,a[0]其实是一个整体,而用+其实是用的地址也就是指针,比如这道题中*(p+1),地址p代表的是数组开始的地址,(p+1)代表把p往后移动一个int的地址,指向了a[1],然后*符号是取地址指向的值。总的来说地址指向更通用,因为是直接操作地址,而[]是针对数组的
作者:
戴文婷
时间:
2014-4-24 11:23
设有定义int a[]={1,3,5,7,9},*p=a;结果为7的表达式是(A)。
A) *(p+3)
B) *(p+4)
C) *p+3
D) *p+4
"+"会改变,p的值,[ ]的意思是不改变P的值来提取数组元素。
有点类似与。
+:
int a=0;
a=a+3
printf("%d",a);
a的值变了
[]
int a=0;
printf("%d",(a+3));
a的值没变
但输出都一样
作者:
流心语
时间:
2014-4-24 15:24
数组名就是数组的地址,也是数组首元素的地址。
数组的访问方式:
int ages[5];
int *p;
p = &ages[0].//等价于 p = ages;
1> 数组名[下标] 如:ages[i]
2> 数组指针[下标] 如:p[i]
3> 指针运算 如:*(p+i)
指针+1并不是指针存储的地址值+1,具体加多少取决于指针的类型。如
int *p p+1表示p的地址值加4
char *p p+1表示p的地址值加1
double *p p+1表示p的地址值加8
作者:
为梦想挺身而出
时间:
2014-4-24 18:42
1、[]里面不能写变量,只能写常量,或者写宏,宏是在编译0和1之前运行的,牵扯的跟这个关系不大,目前一般[]里不写值的灵活性更大。
2、int *p = a; 这里是把a的地址赋值给了p,a是数组名,可以省略&
3、*(p+3) :这里p是存储的a的地址,也就是a[0]这个位置,p+3 就是在p的基础上往右移三位,加上括号就是优先计算括号里的,再把这个地址对应的值取出来就是7这个位置的,不加括号就先把这个地址对应的值取出来再加上数字三,就是地址位置 也是a[0]这个位置为1+3=4
#include <stdio.h>
int main()
{
int a[]={1,3,5,7,9},*p=a;
printf("%d\n", *(p+3)); //先计算括号里的算出来的地址再取值
printf("%d\n", *p+3);//先取值后计算
return 0;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2