c語言p和p
A. c語言 *p跟p什麼區別啊
int a[10]; *a=a[0], a=&a[0]; 同理*p 就是p指針變數中的內容,這都是(邏輯代碼)C代碼的一種表示而已。
給你個例子:
註:這里指的通用寄存器有eax,ebx,ecx,edx,ebp,esp,esi,edi
dword ptr:告訴處理器,安裝雙字,即16X2位bit處理
mov:方向 A <- B
lea: load execute address EA指的是執行時,分配的內存地址
[] : 取寄存器標識出的內存塊中的內容
1:
2: int main(){
00401010 push ebp // 內存分配
00401011 mov ebp,esp
00401013 sub esp,70h
00401016 push ebx
00401017 push esi
00401018 push edi
00401019 lea edi,[ebp-70h] // 初始化
0040101C mov ecx,1Ch
00401021 mov eax,0CCCCCCCCh
00401026 rep stos dword ptr [edi]
3:////////////////////////////////////////////下面是關鍵
4: int array[10];
5: int* p = array;
00401028 lea eax,[ebp-28h] // 取數組變數內存空間地址,值存入eax寄存器
0040102B mov dword ptr [ebp-2Ch],eax // eax寄存器值接著轉存到 p指針變數內存空間
6: int b = *p;
0040102E mov ecx,dword ptr [ebp-2Ch] // 取p指針變數內存空間地址,放入一個空閑的ecx寄存器
00401031 mov edx,dword ptr [ecx] // *p,即把ecx,或者是說p指針所指的內容取出,放到edx裡面。
00401033 mov dword ptr [ebp-30h],edx // 把edx裡面的東西,就是所謂的*p放到b變數空間裡面。
7:
8: return 0;
00401036 xor eax,eax// 異或掉使用過的傳值寄存器,設置錯誤碼為0.
9: }///////////////////////////////////////收工
00401038 pop edi
00401039 pop esi
0040103A pop ebx
0040103B mov esp,ebp
0040103D pop ebp
0040103E ret
B. c語言中p*是什麼意思,他和*p的區別是什麼
p*
如是出現在算術表達式中,這個星號就是乘號,表示相乘,如果是出現在聲明中(如變數定義),那就表明p是一種數據類型,p*表示要聲明這種類型的指針變數。
*p
依然可以表示相乘的運算,也可表示提取p指針指向的位置保存的值。例如:
int a=9;
int *p=a;
printf("%d",*p);
這個printf()調用中的*p表示提取p指針指向的地址(即變數a的地址)保存的值(即變數a的值)
C. c語言的指針部分*p與p的區別是什麼
p是指針變數,其值是一個變數的地址。p收到了哪個變數的地址,就指向哪個變數。該變數成為p的對象。
*p是p所指向的對象的值。
例如:int i=3,*p;
p=&i; 注意:p收到i的地址,故p指向i,i是p的對象。
printf("%d,%d ",i,*p); 輸出:3,3 注意:*p是p所指向的對象的值,即i的值。
D. c語言的指針部分 *p與p區別
c語言的指針部分 *p與p區別如下:
1、作用不同
*p表示此指針指向的內存地址中存放的內容。
p是一個指針變數的名字,表示此指針變數指向的內存地址。
2、輸出內容的格式不同
*p常用在一個和指針類型一致的變數或者常量。
p輸出一個指針的地址,通常是輸出一個16進制的數。
3、效果不同
*p是讓編譯器從指定的地址中讀取出數據。
p是用來存放要讀取數據的地址。
(4)c語言p和p擴展閱讀
C語言中使用指針的作用:
1、指針使程序的不同部分能夠共享數據
類似於共享內存,如果將某一個數據值的地址從一個函數傳遞到另外一個函數,這兩個函數就能使用同一數據。
2、利用指針,能在程序執行過程中預留新的內存空間
大多數情況下,可以看到程序使用的內存是通過顯式聲明分配給變數的內存。但是在很多應用場合中,可能程序運行時不清楚到底需要多少內存,使用指針可以讓程序在運行時獲得新的內存空間,並讓指針指向這一內存更為方便。
3、指針可以用來記錄數據項之間的關系
在高級程序設計應用中,指針被廣泛應用於構造單個數據值之間的聯系。比如,程序員通常在第一個數據的內部表示中包含指向下一個數據項的指針(實際上就是鏈表了),來說明這兩個數據項之間有概念上的順序關系。
E. C語言中*p和**p有何區別
一、表示的東西不同
*p表示p代表相應數據類型在存儲單元中存儲的首地址,而這個存儲單元存儲的是相應類型數據的數值。
**p表示p也表示地址,簡單的說,這個地址對應的存儲單元存儲的數也是一個地址,而不是數值,而這個被存儲的地址對應的存儲單元存儲的數據才是真正的相應類型的數值。
二、基類型不同
例如int *p1,**p2;
兩者本質上都是指針,但是兩者的基類型不同。p1的基類型是int,換句話說p1指針指向的是int型的數據,而p2的基類型是int *換句話說p2指向的是指向int型數據的指針,即指向指針的指針。
三、用法不同
例如int *p;
那麼p就是指向int類型變數的一個指針。(即數組)
如果int**p;
那麼p就是指向int*類型指針的一個指針。(即指向一維數組的指針,即二維數組)
F. c語言中,p.和p->有什麼區別
p. p是類的對象,點後面要跟類中的元素,這樣就完成了類裡面元素的調用,元素可以是變數也可以是函數。
p->是傳地址,比如說有另一個變數a,你p->a就把p的地址也給a了
G. C語言編程中通過&p和p指令獲取的內存地址是不一樣的
當然不用一樣。
p是指針變數,和一般變數不同的是,它裡面存放的是一個地址。(你這里p存放的就是ch變數的地址)。
&是取地址符號,取的是變數的地址。
*是取指針所指向的地址的值。(這里p指向的是ch,所以對*p賦值,就等同於對ch賦值)。
所以你列印p是變數ch的地址,而你列印&p列印的是變數p的地址,自然不同。
H. C語言 *p和p有什麼區別啊為什麼最後輸出*p=20啊
p為指針變數,存儲的是變數值在內存中的地址,單獨的p表示一個內存地址,*p表示從p地址中取出其中存儲的值,即count的值20
I. C語言p和&p的區別
如圖所示,按道理在學匯編後會懂得的