C程大师请进:指针中的星号到底什么意思?
有资料上说数组a[0]和*&a[0]等价。这是为什么啊?还说a[i]和*(a+i)等价。这又是为什么?指针到底啥玩意儿?能干啥?听说是C程中的精华啊...
有资料上说 数组a[0]和*&a[0]等价。这是为什么啊?还说a[i]和*(a+i)等价。这又是为什么?
指针到底啥玩意儿?能干啥?听说是C程中的精华啊 展开
指针到底啥玩意儿?能干啥?听说是C程中的精华啊 展开
4个回答
展开全部
指针是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
利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。比如说和结构体的结合使用。使得文件操作以及链表的应用更加方便。但是刚开始学的话也容易出错,比如说在与函数结合的时候。在学习指针中除了要正确理解基本概念,还必须要多编程,上机调试。只要作到这些,指针也是不难掌握的。
你举的例子就是关于指针和数组的关系,在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
展开全部
声明变量的时候加*,是说这个变量是一个指针,比如 int *p; 意思是p是一个指针,它操作的对象是一个整数。指针实际上是一个内存地址。
使用时加*,是向这个指针指向的地址存入内容。比如 *p = 1;意思是向p指向的地址赋值整数1;
这个有点像超市的储物箱,声明指针就是给某个储物箱起个名字,赋值就是向这个箱子放东西。
使用时加*,是向这个指针指向的地址存入内容。比如 *p = 1;意思是向p指向的地址赋值整数1;
这个有点像超市的储物箱,声明指针就是给某个储物箱起个名字,赋值就是向这个箱子放东西。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
* 在定义的时候,只是说明,我要定义一个指针了。
* 在非定义的时候,表示取后面那个地址里面的内容。
* 在非定义的时候,表示取后面那个地址里面的内容。
追问
再问一下 *p[i] p和[i]先结合还是先和*先结合?
追答
*是最后面,它的优先级很低。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |