| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 304 人关注过本帖
标题:数组名输出问题
只看楼主 加入收藏
li362490567
Rank: 1
等 级:新手上路
帖 子:89
专家分:8
注 册:2015-7-9
结帖率:0
收藏
 问题点数:0 回复次数:4 
数组名输出问题
int marbles[10] 然后
printf("%d",marbles)为何显示40? marbles不是marbles[0]的地址么?不应该是显示一个地址的字节么? 求回答
2015-08-10 21:34
实际应用
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:89
专家分:341
注 册:2015-5-30
收藏
得分:0 
marbles是marbles[0]的地址
%p显示一个地址
2015-08-10 21:47
暴风晕
Rank: 12Rank: 12Rank: 12
来 自:冥界
等 级:火箭侠
威 望:6
帖 子:402
专家分:3107
注 册:2015-8-8
收藏
得分:0 
标识符用错了,用%p
2015-08-10 23:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
人們常說,指針和整數等效,尤其在C語言中,有把整數賦值給指針的用法,那麼問題來了:既然等效,為什麼要區分%d和%p?

授人以渔,不授人以鱼。
2015-08-10 23:27
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
地址,是一個“處所”概念。處所總要一個指示的方式,比如二維或三維空間中一個點,需要用一組有序數來表示其確切位置,而這位置又與實現選定的原點有關(學過高中物理的都應該很清楚這種概念),那麼,這個“地址”顯然不是一個“數”。雖然計算機的內存是一維的,但邏輯上地址與前述二維或三維空間相同,也不是一個數,而且,在以前的16位機時代,用16位的指針也可以用基址和偏移值的方式構造出32位的地址,即兩個16位數用高低位拼接成一個更大的數字,CPU先定位基址,然後在此地址之上再延伸,通俗地說是駁接,那樣的原理上說地址是可以無限的,那個時候有Large指針和Huge指針的概念,誰都明白指針值不僅僅是整數,而是一個有機結構。

實際上,計算機的字元是8位二進制字節,16位、32位、64位整數,都是用同樣的拼接方式用最基本的8位值構造出來的,閱讀一個16位的整數,可以分開兩部分,高8位和低8位,搞8位就乘以256,加低8位,即是實際值。指針也是這般,基址乘以多少,是約定的,然後尋址就祗寫偏移值,所以,當看到一個偏移指針時,那就不是真實地址。

地址,或指針,不是一個整數,那是必須要搞清楚的概念。printf()輸出地址,用%p約定符,是以前就傳下來的,因為那個時候,地址確實不是整數,所以不用%d,16位的%d形式不可能表達更高位數的地址,正如對長型數必須用%l告知處理方式不同一樣。

授人以渔,不授人以鱼。
2015-08-11 09:46
快速回复:数组名输出问题
数据加载中...
 
   



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

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