| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 706 人关注过本帖
标题:test: “二維數組”
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏
 问题点数:0 回复次数:15 
test: “二維數組”
僅供參考:
图片附件: 游客没有浏览图片的权限,请 登录注册

2015-02-17 14:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
解釋:實際上data1和data2都是一維數組,然而data1的每一個元素都是一個10元素的一維數組,data2的每個元素是一個(指向char數據類型的)指針。指針和數組的區別,就在求數據尺寸時體現出來,data1[1]是一個數組,它的尺寸是10(定義的尺寸);data2[1]是指針,尺寸就是指針的大小4(32位環境)。

然而,這樣兩個數組的data?[1]+1用printf()輸出的效果卻是相同的(參見:https://bbs.bccn.net/thread-442045-1-1.html),原因在於調用printf()函數時這個實參被蛻化爲指針了,這個現象掩蓋了事物的本質,所以很多人以爲這樣定義的兩個數組是相同的。

再三强調:指針和數組不要混淆!


[ 本帖最后由 TonyDeng 于 2015-2-17 14:57 编辑 ]

授人以渔,不授人以鱼。
2015-02-17 14:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
數組和指針尋訪方式的區別:

數組名直接就是數據的入口地址,訪問x[0],CPU直接到達這個元素的所在地。這是直接手段。
對指針,CPU需要先讀取指針變量的值,獲得地址,然後再到相應的地址。這是間接手段。

數組變量是一個數據,但指針的運用需要兩個數據,一個是指針本身,另一個才是它所指向的數據。


[ 本帖最后由 TonyDeng 于 2015-2-17 15:15 编辑 ]

授人以渔,不授人以鱼。
2015-02-17 15:04
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
程序代码:
#include <stdio.h>

int main(void) {
    char data1[3][10] = {"one", "two", "three"};
    char *data2[3] = {"one", "two", "three"};
    char (*data3)[10] = data1;
    printf("%llu\n", sizeof(data1[1]));
    puts(data1[1]);
    printf("%llu\n", sizeof(data2[1]));
    puts(data2[1]);
    printf("%llu\n", sizeof(data3));
    puts(*++data3);
    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2015-02-17 15:08
邵蜜柚
Rank: 2
来 自:权大大
等 级:论坛游民
帖 子:79
专家分:86
注 册:2015-2-8
收藏
得分:0 
那个10怎么来的?定义的尺寸??

请给你男神一个爱你的理由。
2015-02-17 15:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 4楼 longwu9t
1.用%llu輸出想説明什麽?
2.data3的用法可歸爲晦澀之列,hehe

授人以渔,不授人以鱼。
2015-02-17 15:21
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用邵蜜柚在2015-2-17 15:18:37的发言:

那个10怎么来的?定义的尺寸??

是的,定義是data[3][10],第二個是10。

授人以渔,不授人以鱼。
2015-02-17 15:22
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 6楼 TonyDeng
图片附件: 游客没有浏览图片的权限,请 登录注册

Only the Code Tells the Truth             K.I.S.S
2015-02-17 15:32
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
哦,你的編譯器默認sizeof()返回long long類型。在我這裏%llu輸出是極大的數據,sizeof()一個數據那麽大,很可觀了。

授人以渔,不授人以鱼。
2015-02-17 15:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
參考:
图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2015-02-17 15:49
快速回复:test: “二維數組”
数据加载中...
 
   



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

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