C程大师请进:指针中的星号到底什么意思?

有资料上说 数组a[0]和*&a[0]等价。这是为什么啊?还说a[i]和*(a+i)等价。这又是为什么?
指针到底啥玩意儿?能干啥?听说是C程中的精华啊

指针是C语言中一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。打个比方例如你要找一个叫做张飞的人,如果你知道他的具体住址,住在什么大街什么号,那么就可以通过访问这个地址来找到对应的人了,指针就好比这个住址门牌号码。 它用一个*号代表,例如:int *p;定义了一个指向整型变量的指针p,而*p就是取值,把p所指向的地址空间里面的内容取出来。

利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。比如说和结构体的结合使用。使得文件操作以及链表的应用更加方便。但是刚开始学的话也容易出错,比如说在与函数结合的时候。在学习指针中除了要正确理解基本概念,还必须要多编程,上机调试。只要作到这些,指针也是不难掌握的。

你举的例子就是关于指针和数组的关系,在C语言中,数组的数组名就是数组存放在内存中的首地址,知道了这个a[0]和*&a[0]等价,a[i]和*(a+i)等价就好理解了。a[0]就是a数组中下标为0号的单元存储的内容,而&a[0]就是取a[0]的内存地址,加上*,就是取a[0]的内存地址里存放的值。a[i]就是a数组中下标为i号的单元存储的内容,a+i代表的是数组首地址加上i,指向数组第i个元素的存放内存地址,而加上*,就是取数组第i个元素得值,等价于a[i]。
这里有一个关于指针的文章,讲的很深入,感兴趣的话可以研究一下:http://zhidao.baidu.com/question/155815675.html
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-12
声明变量的时候加*,是说这个变量是一个指针,比如 int *p; 意思是p是一个指针,它操作的对象是一个整数。指针实际上是一个内存地址。
使用时加*,是向这个指针指向的地址存入内容。比如 *p = 1;意思是向p指向的地址赋值整数1;

这个有点像超市的储物箱,声明指针就是给某个储物箱起个名字,赋值就是向这个箱子放东西。
第2个回答  2018-04-16

C语言中* 在定义的时候,只是说明我要定义一个指针了。
* 在非定义的时候,表示取后面那个地址里面的内容。

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

本回答被网友采纳
第3个回答  2014-06-12
* 在定义的时候,只是说明,我要定义一个指针了。
* 在非定义的时候,表示取后面那个地址里面的内容。追问

再问一下 *p[i] p和[i]先结合还是先和*先结合?

追答

*是最后面,它的优先级很低。

本回答被提问者采纳
相似回答