#include #include #include using namespace std;
tchar * test2(tchar* ,tchar*);
int main(void)
//返回臨時變數位址的問題???
tchar * test2(tchar* str1,tchar* str2)
; //warning c4172: 返回區域性變數或臨時變數的位址
tchar *p=str1; //p也是test2函式的臨時指標?編譯不會有警告報錯,main函式也能正常
_tcscpy(p,str2);
return p;}/*
2023年3月3日9:36:46
程式執行結果如下:
world
請按任意鍵繼續. . .
*//*
隨風飄(157332460) 10:34:16
p只想的是str1.
返回的是str1指向的位址
所以不會有任何邏輯上的錯誤。
vc++work_125096(125096885) 10:35:27
其實p就是str的位址?所以沒有任何問題?
隨風飄(157332460) 10:36:16
p是指標變數,乙個32位位址值的變數。它裡面存的值跟str1存的是一樣的。
逆反回的不是p的位址,而是p的值。
反過來說,你不返回,也已經把str2的拷貝到str1裡了。
那個返回值,有沒有,都無所謂了。
vc++work_125096(125096885) 10:37:10
是啊隨風飄(157332460) 10:37:35
你改變的是str1的陣列,而不是p
*//*
004114f4 8b45 0c mov eax, dword ptr [ebp+0xc] //str2
004114f7 50 push eax
004114f8 8b4d f8 mov ecx, dword ptr [ebp-0x8] //str1
004114fb 51 push ecx
004114fc e8 a9fbffff call 004110aa //_tcscpy
*//*
0041150c 8b45 0c mov eax, dword ptr [ebp+0xc] //str2
0041150f 50 push eax
00411510 8d4d b8 lea ecx, dword ptr [ebp-0x48] //tchar p[64] 臨時變數
00411513 51 push ecx
00411514 e8 96fbffff call 004110af //_tcscpy
*//*
tchar * test2(tchar* str1,tchar* str2)
; //tchar *p=str1;
tchar *p=p1;
_tcscpy(p,str2);
return p; //臨時變數 error
}*/
指標的理解與使用 總結1
指標實際是乙個變數,只不過這個變數是存的位址,我們通過這個變數可以找到以它為位址的記憶體單元。1bit 就是乙個二進位制位 1byte 8bit 實際上是 於ascii碼表,需要表示最少128個字元,所以要用8個bit位來表示。位址存放東西的時候也要以位元組為最小單位。32位位址中,指標需要4個位元...
鍊錶學習1 C 指標的理解(1)
1.c 中指標的主要作用是指向node 讓你知道你現在所指的位置和node 是哪個,讓你關注於你現在要處理的node str next的作用是為了連線鍊錶 防止鍊錶斷開 2.p next的變化,就是乙個斷捨離的過程 斷了以前的,指向現在的。3.指標的賦值如何理解 我指著它 node 呢,你也快指它啊...
C語言指標的理解以及指標的指標的理解
指標指向的是記憶體位址編號,記憶體位址編號指向的是對應的內容。我們需要乙個變數,來儲存記憶體位址編號,這個變數的值是乙個記憶體位址編號,但是我們可以通過修改變數的值,來不斷的改變記憶體位址編號。但是,我們如果需要改變該記憶體位址編號的值時,就需要對該記憶體位址編號的值進行修改,而不改變記憶體位址編號...