| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3470 人关注过本帖
标题:如何区分这几个指针呢?
只看楼主 加入收藏
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 

哈哈..这下俺有玩的了

咱先说第二个..那你认为这个

int a[2][3];
int *p=a;
不是一个指针赋值给另一个指针吗?那他为什么不可以呢?

这样可以
但是a始终是个数组名 它不是指针 它对应着一个内存块 但在适当的时候会转化成指针
这并不是指针赋值给指针 而是对p进行初始化 使它指向这个数组的首地址 

2006-08-21 08:53
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

同意穆楊的, 指針, 裏面裝的是一個地址值,
int a[2][3] = { {1, 2, 3}, {4, 5, 6} };
int *p = a; // 編譯會不通過, 編譯器並不單是將 a 的地址放入 p

但是, 可以這樣..
假設 a 的地址是 0x0012ff68
int *p = (int*)0x0012ff68;
這樣 p 就裝了 a 的地址, 是可行的
*p = 1
*(p+1) = 2
*(p+2) = 3
*(p+3) = 4
*(p+4) = 5
*(p+5) = 6


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-21 08:56
heliujin
Rank: 2
等 级:论坛游民
帖 子:249
专家分:14
注 册:2006-3-14
收藏
得分:0 
好象讨论的越来越离谱了吧
我都迷糊了
2006-08-21 09:02
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-08-21 09:16
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
不清楚牧羊的“数组名就是指针”的定义到底是什么意思,而yeshirow的证明也有点古怪,如果按照yeshirow的证明方法,是不是也可以证明0x0012ff68也是一个指针??但是实际上0x0012ff68是一个地址(你也可以看成是一个十六进制值)。
在我看来,C中数组名和指针还是不同的,如同地址和指针还是两个概念,对于编译器来说,数组名是一个地址,而指针则是一个地址的地址,再详细点即是说编译器通过数组访问数据是直接访问的,而通过指针来访问的话是首先取得指针的内容,然后将指针指向的地址作为起始地址再加上偏移量来访问数据,两者不是可以相提并论的,除非你认为指针就是地址

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-08-21 09:18
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-08-21 09:18
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 
指針, 它是一個地址, 這個地址裏的內容也是一個地址值

[引]數組名是一個地址 /
指針名是一個地址
[引]而通过指针来访问的话是首先取得指针的内容
而通過地址來訪問的話道首先取得地址的內容
------------------------------------------------------
關於指針導致的諸多問題在於, 一個指針變數應該存放甚麽, 也就是如何正確初始化一個指針
指針和變數一樣, 關鍵在於指針應該存放甚麽地址.
如果能正確初始化指針, 應該沒有甚麽問題了

原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-21 09:47
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

還想到一點,
對於 指針 p, 假如 p 不是地址,
p++ 代表甚麽, 是 p 加了還是地址加了


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-21 09:51
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
yeshirow,请注意,我上面所说的话都是针对你说的同意牧羊的一个观点(数组名就是指针)来说的,而你上面所说的虽然是正确的,假如你要阐述的仍然是“数组名就是指针”,并以上面的说法为证的话,那么我是不是可以得出由于函数名也是一个地址,所以函数名就是指针?同样,只要是有地址的都是指针的结论??
指针中存放的是地址,不代表指针就是地址,你可以说在用法上部分情况下数组名和指针是一致的,但是不可以说数组名就是指针
[QUOTE]還想到一點,
對於 指針 p, 假如 p 不是地址,
p++ 代表甚麽, 是 p 加了還是地址加了[/QUOTE]
我上面已经说过了p中存放的值是地址,对于你这个说法我更感到奇怪,不知道这句话想说明什么,其实某种程度上,指针p可以看作一个专门存放指针的变量,我不知道你这句话的具体函数,不过我想说,int i = 0; i++; 这里是i中存放的值加了还是地址加了不用我来确认吧?

世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-08-21 10:07
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 
aogun 忙中出错,
指针p可以看作一个专门存放 地址 的变量

我同意aogun的看法,指针和地址的关系就象 int型变量比如 i 和 整数比如 2 的关系一样,一个是变量,一个是常量。

2006-08-21 10:45
快速回复:如何区分这几个指针呢?
数据加载中...
 
   



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

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