指標的理解1

2021-06-28 21:51:31 字數 2133 閱讀 6729

#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語言指標的理解以及指標的指標的理解

指標指向的是記憶體位址編號,記憶體位址編號指向的是對應的內容。我們需要乙個變數,來儲存記憶體位址編號,這個變數的值是乙個記憶體位址編號,但是我們可以通過修改變數的值,來不斷的改變記憶體位址編號。但是,我們如果需要改變該記憶體位址編號的值時,就需要對該記憶體位址編號的值進行修改,而不改變記憶體位址編號...