亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 4701 | 回復(fù): 11
打印 上一主題 下一主題

指針數(shù)據(jù)類型問題 [復(fù)制鏈接]

論壇徽章:
1
午馬
日期:2013-08-23 23:39:47
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2007-07-27 10:29 |只看該作者 |倒序瀏覽
int main(){
        int a[3]={0};
        int **p;
        p=&a;
}
為何p=&a;在vs2005 下不能編譯通過啊,顯示錯誤為
cannot convert from 'int (*__w64 )[3]' to 'int **':em11:

論壇徽章:
0
2 [報告]
發(fā)表于 2007-07-27 10:33 |只看該作者
類型不同嘛

論壇徽章:
0
3 [報告]
發(fā)表于 2007-07-27 10:49 |只看該作者
原帖由 phy0077 于 2007-7-27 10:29 發(fā)表
int main(){
        int a[3]={0};
        int **p;
        p=&a;
}
為何p=&a;在vs2005 下不能編譯通過啊,顯示錯誤為
cannot convert from 'int (*__w64 )[3]' to 'int **':em11:



這就是數(shù)組與指針的一個差別.
int **p; p里面是一個地址,而該地址所指向的變量又是一個指針類型.
p = &a;雖然是讓p指向了a的首地址, 但是a這個標(biāo)識符的首地址里面的內(nèi)容卻是一個整數(shù)類型的. 按道理應(yīng)該為指針類型的.
所以會出現(xiàn)問題. 用gcc編譯會有warnning, 在運行時報段錯誤, 就是訪問了不該訪問的內(nèi)存區(qū)域. 即以a[0]這個值為地址去進行訪問.
關(guān)于這個內(nèi)容在<C專家編程>第四章有講解.

[ 本帖最后由 scutan 于 2007-7-27 12:14 編輯 ]

論壇徽章:
0
4 [報告]
發(fā)表于 2007-07-27 11:35 |只看該作者
原帖由 scutan 于 2007-7-27 10:49 發(fā)表



這就是數(shù)組與指針的一個差別.
int **p; p里面是一個地址,而該地址所指向的變量又是一個指針類型.
p = &a;雖然是讓p指向了a的首地址, 但是a這個標(biāo)識符的首地址里面的內(nèi)容卻是一個字符類型的. 按道理應(yīng)該 ...


那本書上是這樣說的么?還是你記錯了?

看書本質(zhì)是要轉(zhuǎn)換成自己理解的東東。

int main(){
        int a[3]={0}; // 首先要明白,a在這里就是一個地址。假定a的地址是0xbfc97c84,a+0 == a == 0xbfc97c84
        int **p;   
        p=&a; //好,p = &0xbfc97c84 = 0xbfc97c84 ,說有警告,那是編譯器知道你可能要干傻事了
      //*p[0] = 1L;  //加上這個行么?答案是不行的,因為p[0] == *(p+0) ==*(p)== *(0xbfc97c84)==*(a+0) == a[0]==0(初始化的值)
                    //so, *p[0] == *(0) 我們知道指針通過是否為0x00來判斷是否有效,好了,你準備把1L村到一個無效的指針中去,
                    //不幸的是,這個指針指向的地址是0x0,而操作系統(tǒng)不允許你忘0x0上存東西,所以。。。,如果在初始化的時候,
                   //你把a[0]初始化成一個合法的地址的話,我想加上這個應(yīng)該是可以的。--這個沒有測試過哈
  }

ps至于樓上說的是一個字符,我表示嚴重不同意阿

論壇徽章:
0
5 [報告]
發(fā)表于 2007-07-27 11:53 |只看該作者
原帖由 Jiangge 于 2007-7-27 11:35 發(fā)表


那本書上是這樣說的么?還是你記錯了?

看書本質(zhì)是要轉(zhuǎn)換成自己理解的東東。

int main(){
        int a[3]={0}; // 首先要明白,a在這里就是一個地址。假定a的地址是0xbfc97c84,a+0 == a == 0xbfc ...


在<C專家編程>中文版86頁最上面的一段話, 你自己去看, 難道a這個地址里面的值不是一個整數(shù)類型嗎?
還有, 如果說a[0]的值為一個地址的值, 當(dāng)然可以進行強制轉(zhuǎn)化去得到這個地址的內(nèi)容, 但是你在寫代碼時,你怎么知道你程序會運行在哪個地址?
int **p, p所指向的難道不是一個整數(shù)指針么?
int a[3], a這個地址里面的內(nèi)容難道不是一個整數(shù)類型么?
你讓一個整數(shù)類型變成一個指針類型, 當(dāng)然會出錯.

[ 本帖最后由 scutan 于 2007-7-27 12:13 編輯 ]

論壇徽章:
0
6 [報告]
發(fā)表于 2007-07-27 12:04 |只看該作者
>> 這就是數(shù)組與指針的一個差別.

應(yīng)該是指針與指針的類型上的差別。

&a 表達式的結(jié)果是一個類型為 int (*)[3] 的指針。程序錯誤是因為這種類型的指針轉(zhuǎn)換為 int** 指針是非法的。

論壇徽章:
0
7 [報告]
發(fā)表于 2007-07-27 12:26 |只看該作者
原帖由 scutan 于 2007-7-27 11:53 發(fā)表


在中文版86頁最上面的一段話, 你自己去看, 難道a這個地址里面的值不是一個字符類型嗎?
還有, 如果說a[0]的值為一個地址的值, 當(dāng)然可以進行強制轉(zhuǎn)化去得到這個地址的內(nèi)容, 但是你在寫代碼時,你怎么知道你程 ...



我看過那本書,只是忘了,但是:

p所指向的難道不是一個字符指針?

==,怎么p指向的是一個字符指針? 它指向的是一個指向(int*) 的指針,指針不管類型,一般占用機器的一個字長,比如X86,一般占4個字節(jié),在Power(還是Alpha)中占8個字節(jié),所以你說一個字符指針,實在無法理解

論壇徽章:
0
8 [報告]
發(fā)表于 2007-07-27 12:29 |只看該作者
原帖由 whyglinux 于 2007-7-27 12:04 發(fā)表
>> 這就是數(shù)組與指針的一個差別.

應(yīng)該是指針與指針的類型上的差別。

&a 表達式的結(jié)果是一個類型為 int (*)[3] 的指針。程序錯誤是因為這種類型的指針轉(zhuǎn)換為 int** 指針是非法的。


對,但不能說程序一定錯誤吧(只需強制轉(zhuǎn)換),只是有編譯器的不讓你編譯通過,有的只是警告,

[ 本帖最后由 Jiangge 于 2007-7-27 12:31 編輯 ]

論壇徽章:
0
9 [報告]
發(fā)表于 2007-07-27 12:31 |只看該作者
原帖由 Jiangge 于 2007-7-27 12:26 發(fā)表



我看過那本書,只是忘了,但是:

p所指向的難道不是一個字符指針?

==,怎么p指向的是一個字符指針? 它指向的是一個指向(int*) 的指針,指針不管類型,一般占用機器的一個字長,比如X86,一般占 ...


筆誤筆誤, 已更改.

論壇徽章:
0
10 [報告]
發(fā)表于 2007-07-27 12:34 |只看該作者
int a[3]={5};
int **p = &a;

a和&a的值是一樣的,但是意義不一樣
*&a   <===>   a
**&a <===>   a[0]

p得到&a的值之后,就將數(shù)組的意義完全拋棄了
*p在值上等于a[0]
**p   ===>  core dump (會以a[0]為地址去訪問一塊內(nèi)存)

[ 本帖最后由 ypxing 于 2007-7-27 12:35 編輯 ]
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP