【指標與數組區別】ch[]與*ch??RT,這兩個有的時候可以替換。但是存字串時卻不完全相同。char ch1[]="我愛你";char *ch2="我愛你";cout<<sizeof(ch1)<<endl;//結果7cout<<sizeof(ch2)<<endl;//結果4我知道第二個是首地址,但第一個是什麼,不懂啊,不是首地址嗎?
----------------
如鵬站內搜尋“指標 數組 區別”
http://so.rupeng.com/?keyword=%E6%8C%87%E9%92%88+%E6%95%B0%E7%BB%84+%E5%8C%BA%E5%88%AB
如下文章供參考:
1、數組與指標---都是"退化"惹的禍【轉載】
2、char *與char[ ]的一點疑問
3、看"char *與char[ ]的一點疑問"得到的一些結論
4、Sizeof與Strlen的區別
5、C/C++數組名與指標區別深入探索
回答:
5. 指標變數的sizeof
學過資料結構的你應該知道指標是一個很重要的概念,它記錄了另一個對象的地址。既然是來存放地址的,那麼它當然等於電腦內部地址匯流排的寬度。所以在32位電腦中,一個指標變數的傳回值必定是4(注意結果是以位元組為單位),可以預計,在將來的64位系統中指標變數的sizeof結果為8。
char* pc = "abc";
int* pi;
string* ps;
char** ppc = &pc;
void (*pf)();// 函數指標
sizeof( pc ); // 結果為4
sizeof( pi ); // 結果為4
sizeof( ps ); // 結果為4
sizeof( ppc ); // 結果為4
sizeof( pf );// 結果為4
指標變數的sizeof值與指標所指的對象沒有任何關係,正是由於所有的指標變數所佔記憶體大小相等,所以MFC訊息處理函數使用兩個參數WPARAM、LPARAM就能傳遞各種複雜的訊息結構(使用指向結構體的指標)。
6. 數組的sizeof
數組的sizeof值等於數組所佔用的記憶體位元組數,如:
char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 結果為4,字元 末尾還存在一個NULL終止符
sizeof( a2 ); // 結果為3*4=12(依賴於int)
一些朋友剛開始時把sizeof當作了求數組元素的個數,現在,你應該知道這是不對的,那麼應該怎麼求數組元素的個數呢Easy,通常有下面兩種寫法:
int c1 = sizeof( a1 ) / sizeof( char ); // 總長度/單個元素的長度
int c2 = sizeof( a1 ) / sizeof( a1[0] ); // 總長度/第一個元素的長度
寫到這裡,提一問,下面的c3,c4值應該是多少呢
void foo3(char a3[3])
{
int c3 = sizeof( a3 ); // c3 ==
}
void foo4(char a4[])
{
int c4 = sizeof( a4 ); // c4 ==
}
也許當你試圖回答c4的值時已經意識到c3答錯了,是的,c3!=3。這裡函數參數a3已不再是數群組類型,而是蛻變成指標,相當於char* a3,為什麼仔細想想就不難明白,我們調用函數foo1時,程式會在棧上分配一個大小為3的數組嗎不會!數組是“傳址”的,調用者只需將實參的地址傳遞過去,所以a3自然為指標類型(char*),c3的值也就為4。
源自百科
本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/helihui123/archive/2009/10/24/4722036.aspx