指標的疑惑 * 與& |
尚未結案
|
fatming
一般會員 發表:10 回覆:7 積分:3 註冊:2004-09-30 發送簡訊給我 |
假設條件如下
void aaa(int ab[24])
{
int abd[24];
memcpy(abd,&(ab),sizeof(abd));// 疑惑1
ab[0]=-1;
ab[5]=-1;
memcpy(abd,&(*(ab)),sizeof(abd));// 疑惑2
}
int a[24];
int b[96];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
aaa(a);
aaa(b);
小弟在傳入ab值之後對於
memcpy(abd,&(ab),sizeof(abd));// 疑惑1
memcpy(abd,&(*(ab)),sizeof(abd));// 疑惑2
所得到abd值不一樣感到有些疑惑
一個是立刻依此址得開始取值 &(ab)
跟&(*ab) 從其指向的地方開始取值
這兩開始點應該是一樣的才對
不知道小弟什麼地方搞錯了
請各位先進指教謝謝
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
fatming 您好: 底下說明供您參考!
//--------------------------------------------------------------------------- AnsiString msg; void aaa(int ab[24]) { int abd[24]; msg.printf("ab=%X\n&&(ab)=%X\n", ab, &(ab)); memcpy(abd,&(ab),sizeof(abd));// 疑惑1 ab[0]=-1; ab[5]=-1; msg.cat_printf("&&(*(ab))=%X", &(*(ab))); memcpy(abd,&(*ab),sizeof(abd));// 疑惑2 ShowMessage(msg); } void __fastcall TForm1::Button1Click(TObject *Sender) { int a[24]; int b[96]; msg.printf("a=%X\n&&(a)=%X\n", a, &(a)); ShowMessage(msg); memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); aaa(a); aaa(b); } /* 理論上陣列變數的位址也就是其所存內容的起始位址,這是系統賦予的不能改變。 但是當您將陣列當成函式參數傳入時,其實這些形式參數會被存放在堆疊中,也就是說, 在呼叫函式aaa(int ab[24])時,會先在堆疊中空出一個足夠存形式參數ab的空間, 而且ab所存的值才是傳入陣列的起始位址。 所以此刻所謂的"&ab"不再是原先傳入陣列的起始位址,而是堆疊中存放ab的位址。 因此,您自然就會得到不同的結果。 */ //---------------------------------------------------------------------------RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### |
fatming
一般會員 發表:10 回覆:7 積分:3 註冊:2004-09-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |