黑马程序员技术交流社区
标题:
关于&a &a+1 a a+1 &a[0]
[打印本页]
作者:
Northcity
时间:
2015-7-22 00:21
标题:
关于&a &a+1 a a+1 &a[0]
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a[3]={1,2,3};
int *p=(int*)(&a+1);//强制类型转换
printf("%d\n",*(p-1));
return 0;
}
复制代码
可能好多人对此有疑问, 大家都知道常量是不能进行取地址& 运算的 比如 &5, 可是既然数组名 a 是一个指针常量,为何可以对a 进行&a呢?
首先 a == &a == a[0] ,相比大家都是知道的.都等于首元素地址值. 可是 &a+1 a+1 &a[1] 呢?
&a 取得的时一个行指针, &a+1 所以跨越一行, 对于一维数组,那就是数组后面的地址. 比如上面代码, 定义一个指针 p, 这里必须使用强制类型转换,把行指针转换为普通指针. 又因为跨越了一行,所以 *(p-1)对应的就是 3:victory:
作者:
qq103613
时间:
2015-7-22 00:27
指针好难
作者:
562413895@qq.co
时间:
2015-7-22 09:23
这方面知识C语言书上的243页总结的很详细,可以看看C语言书(谭浩强著之第三版)
作者:
294250051
时间:
2015-7-22 09:51
指针常量是用来存放地址的啊,和你说的&5是一个含义么!a是数组名,一维数组的数组名就是指代数组首元素的地址的。
#include <stdio.h>
int main()
{
int a[3]={1,4,7};
int *p=a;
printf("%d\n%d",*p+1,*(p+1));//输出的一个是第一个元素的值再加1,也就是2,输出的第二个是第二个元素的值。
return 0;
}
感觉你学的太乱了,有点不上道。基础知识一定要扎实,再去看看这一部分知识,可能给你解释你就明白了。
给你附上我自己讲解这一部分的笔记,你自己看看,应该会对你有帮助。
http://blog.csdn.net/felicity294250051/article/details/46989335
12天学好C语言——记录我的C语言学习之路(Day 9) ,你看这一部分试试。
作者:
Foreversidy夏末
时间:
2015-7-22 12:53
学习一下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2