| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1024 人关注过本帖
标题:高人来指点迷津吧!指针实在是问题多多。
只看楼主 加入收藏
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
收藏
得分:0 
回复 10楼 pangding
一个指针只占四个字节,当指向一些较长类型的变量时,值传递时可以节省不少副本对内存的浪费可以这样理解吗?

Stay hungry , Stay foolish!
2012-02-18 09:49
慕羿
Rank: 4
等 级:业余侠客
帖 子:40
专家分:206
注 册:2012-2-16
收藏
得分:2 
可以这样认为。但实际上传递指针的方式就是一种传址方式,不会真正传值的。被传递的值是指针本身,而那本来就是个地址。

用仓库举例的话你可以这么看:

你请人清点你仓库里的货物,方法有两个:

1、你把所有的货物都搬到别人那里,让他帮你清点好——这个是直接传递结构
2、你把地址告诉对方,让他去你的仓库里清点——这个是传递指针。

[ 本帖最后由 慕羿 于 2012-2-18 15:02 编辑 ]
2012-02-18 15:00
慕羿
Rank: 4
等 级:业余侠客
帖 子:40
专家分:206
注 册:2012-2-16
收藏
得分:0 
以下是引用清微御宇在2012-2-17 23:17:00的发言:

就是在指向大型数据时不懂的
int a[1000],*p;
 p=a;
   
sizeof(*p);

sizeof(a[1000]);
 *p指向a[0]就这一个元素吗,指针如何能表示a这个整体呢,而对数据组a进行值传递时要消耗几千字节内存作副本,如果对其中一个元素(假设a[100])值传递也只需要几个字节,和指针差不多!
我是自学的没有老师交,可能理解的狠有问题,希望你们能教教我!

C语言里,数组名字本身就是一个指针。所以,你在把数组传递时传过去的就是一个指针。这两个其实是一回事。

指针表达数组并不奇怪,它被指向了数组的第一个成员的位置,通过计算就能知道其它成员在哪里。唯一的问题是仅仅看到指针你没法知道这个数组有多大,会有可能导致对数组的访问越出界限。不过访问越界本来就是C的毛病,这个毛病在C里遍地都是。
2012-02-18 15:08
fanming999
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-4-1
收藏
得分:0 
嗯嗯
2012-04-01 22:45
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
举一个不太恰当的例子:现在有一堆货物,需要搬到仓库里,你必须一件一件的搬运这些货物,但是现在正好有一辆货车,这样把货物装到车上就可以一下子运到仓库里,你是不是感觉自己省了很多事?这个车在c语言里就好比指针的概念!

愿用余生致力编程
2012-04-02 01:47
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
额 这个问题   你要知道函数调用时是要保存一份参数副本在堆栈中

struct Node {int a[1000];int len;};

那么如果我有个很大的结构体 如果我写函数的时候 void fun(Node node);那么我在调用这个函数的

时候就会把int a[1000];int len;这两个东西全部复制一份压入堆栈 也就是要复制1000*4+4哥字节过去

但是如果写成这样呢void fun(Node *pnode);就只复制4个字节过去 但是不会耽误我去访问结构体里面的信息

如果对它进行修改那么由于没有保存副本 所以我修改的就是原来的内容  但是如果像上面那样我修改的就是

那个副本

                                         
===========深入<----------------->浅出============
2012-04-02 10:30
chinaflag
Rank: 2
来 自:福建泉州
等 级:论坛游民
帖 子:46
专家分:83
注 册:2012-4-1
收藏
得分:0 
都是高手  膜拜中
2012-04-02 13:57
快速回复:高人来指点迷津吧!指针实在是问题多多。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037703 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved