關於指標變數,p和p到底有什麼區別啊

2021-03-07 00:31:02 字數 5786 閱讀 5160

1樓:匿名使用者

1、內容不同

星號是用來指定變數p是指標,p是乙個變數,其值為另乙個變數的位址,它表示了在記憶體中的乙個位址,即,記憶體位置的直接位址。而*p是所指向位址的值。

2、資料型別不同

在程式宣告變數的時候的*,只是表明「它是乙個無符號整數,這個整數指向某個記憶體位址,一次訪問sizeof(type)長度」,所有指標的值的實際資料型別,不管是整型、浮點型、字元型,還是其他的資料型別,都是一樣的,都是乙個代表記憶體位址的長的十六進製制數。

而*p可以是整型、浮點型或者字元型。

3、使用方法不同

在程式設計時,*p可以直接使用,因為p宣告為乙個指標,使用它的時候需要帶上*表示該位置的值,比如int a,*p;*p=a。

直接使用p的時候,p=&a。

2樓:凌亂心扉

區別:以下面的情況說明:

1、int a = 5;

int* p = &a;

結論:*p   是指標變數p指向的變數a的儲存內容,*p = 5;

p   是指標變數的儲存內容,因為p指向a,所以p的儲存內容(儲存空間的值)就是系統為變數a分配的儲存位址;

2、分析:

int a = 5;

int* p = &a;

int* q = p;

3、【說明】

1)上面的程式中首先宣告了乙個int型別的變數a,初始化為5;這個過程為:

2)在初始化時,儲存空間儲存的是int型的值5,儲存位址是由系統自動分配的,同理要宣告乙個指向a的指標,在初始化的時候賦值給指標變數的值應該是變數a的儲存位址,故而有 int* p = &a;

4、在下面的程式中:

int arr = ;

int* parr = arr;

同理,要是宣告另外乙個int型別的指標變數q:

1)int* q = p;

宣告了乙個int型別的指標變數,並將指標變數p的值賦予q,同樣是變數,a = 5,5是變數a的儲存空間的值,那麼p=?,p等於p儲存空間的那個值,即p=#ffa1(a的儲存位址);

現在將這個值賦給了指標變數q,正如a初始化的過程一樣,int a=5的過程,是將5儲存在了int型別變數的儲存空間之中,初始化指標變數q時,也是將等號右邊的值儲存在q的儲存空間之中,上邊的操作的結果如下:

使得指標變數q指向了變數a。

5、【說明】

從上面的操作可以看出,&p代表的是指標變數p的儲存位址。

int* q = *p;

宣告了乙個指標變數q,並對其初始化,這一過程的操作如下:

為指標變數q初始化,q的儲存空間中儲存的值為5.

【說明】

1、從上面的操作可以看出,是將*p的值賦給了q,p指向變數a,p=#ffa1,而*p的過程就是獲得p位址處的儲存空間的值,即*(#ffa1)=5,也就是將5賦給了指標變數q,q的儲存空間儲存的是5;

2、指標變數是指向某一變數的變數,在其儲存空間中儲存的一般是其他變數的儲存位址,上面的初始化過程int* q = *p;是非常危險的,有可能造成程式奔潰。

3樓:仁0者

p的值是指標指向的資料的位址,而*p表示的是指標指向資料的數值,例如a=2;//a的位址為1000

p=&a;

則:p=1000

*p=2

4樓:匿名使用者

p是乙個記憶體位址值

*p是位址p指向的內容

對位址操作的時候直接用p,對內容操作的時候,用*p

5樓:匿名使用者

首先搞明白一點,printf語句中表示式的執行順序是從右向左的,並且對於*(q++),首先進行解引用操作,再自增,即*q, q=q+1;所以說第乙個printf的輸出為2 2

對於第二個printf,首先執行(*q)++,再執行*p++,對於(*q)++可以轉化為先執行(*q),即輸出它的值,再執行(*q)=(*q)+1,最後輸出*p,所以結果為3 2

6樓:樂酷科技

*p++就等於*(p++) p自加 先算出當前位址的值*p 然後指向下個位址

(*p)++是取出位址裡的值 這個值自加 p還是指向原來的位址

7樓:匿名使用者

*p++ 由於++和*同優級,是自右向左的結合方向*(p++),因此等價於*(p++);他們的作用是得到p指向的變數值(*p),然後p +1=》p

(*q)++,是先取p指向的變數值,然後其值再加一;

8樓:匿名使用者

我來舉個例子吧

int a=100;

int * p;//定義 指標 的 指標整形變數p=&a;//對普通 整形變數 變數 取位址操作,在賦值給 指標整形變數 p;

這個是我以前提的問題,可以看一下

9樓:匿名使用者

1. printf中表示式的計算是右結合的,即從右向左運算;但輸出還是從左向右

2. 第乙個printf,先取q所是單元的值顯示,即為2,再對q++,即q所指單元位址後移乙個單元,這裡無意義;然後再對p指單元後自增,先輸出2。「*」運算子的優先順序高於「++」運算子。

3. 第二個printf,都是對p和q所指單元的值進行操作,(*q)++先輸出a的值2,再將其值加1變為3;再將p所指單元的內容a的值輸出3

10樓:yuan興

p代表的是乙個儲存單元的位址,而p*則代表儲存單元裡面存放的內容

11樓:匿名使用者

定義時是*p,使用時p。

12樓:鏡面世界

呃⋯⋯第二個前面無運算子相當於p,有運算子且p是函式名或函式指標時,加括號相當於p,不是則無意義,p是函式名且返回指標且是呼叫時,不加括號是返回的指標的間接引用,第乙個p不是指標的話無意義,如果是指標(什麼指標都行,包括函式指標等不常用的,但不能是野指標,執行時會報錯),如果這個表示式前面是運算符號,相當於p,如果前面是另乙個表示式,是*p與那個表示式位與,p是函式指標時加括號相當於p,p是函式指標或函式的二級指標且該函式返回引用時是返回的引用的記憶體位址。(呼!累死我了,給個滿意啊!

看不懂的話等我有時間弄個**)

c++的指標變數中,*p與p有什麼區別?

13樓:匿名使用者

#include

void main()

程式輸出屬結果:

*p=5

p=0x0012ff7c

press any key to continue

14樓:匿名使用者

p指向的是位址,*是解除操作符,加在p前面是為了獲取儲存在這個位址的值

15樓:匿名使用者

int p = 10; // p 為乙個整形變數

int *pn = &p; // *pn為乙個指向p的指標.

16樓:匿名使用者

*p 值得是該指標指向的變數的值p指的是該指標指向的變數的記憶體位址

c語言的指標部分*p與p的區別是什麼?

17樓:夏日絕

p是指標變數,其值是乙個變數的位址。p收到了哪個變數的位址,就指向哪個變數。該變數成為p的物件。

*p是p所指向的物件的值。

例如:int i=3,*p;

p=&i; 注意:p收到i的位址,故p指向i,i是p的物件。

printf("%d,%d\n",i,*p); 輸出:3,3 注意:*p是p所指向的物件的值,即i的值。

c語言c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

18樓:酒天縱尤晟

賦值的時候*p表示這是乙個指標,p表示是乙個數

而用的時候如果p是乙個指標,那麼*p表示所指向的內容,p本身存著乙個位址。

19樓:莘赩蔚日

intpp=5;

//開闢4位元組記憶體給pp,其中存放的是5的二進位制值;

int*p=&pp;

//開闢4位元組記憶體給p,其中存放的是pp的位址值(只有定義成int*型別的才能存放位址值);

20樓:墨澄邈馮曼

舉個例子:

inta[5]=;

int*p;

p=&a[2];

++*p;//等同於++a[2],使p指向的值加1++p;//等同於p=a[2+1],使p指向目標陣列中的下乙個元素a[3]

c語言 *p 和p的區別?

21樓:楓璽

c語言中,*p 和p都常用在指標當中表示乙個指標變數,*p 和p的區別:

1、表示的含義不同

*p表示此指標指向的記憶體位址中存放的內容。

p表示乙個指標變數的名字,指此指標變數所指向的記憶體位址。

2、輸出的格式不同

*p一般是乙個和指標型別一致的變數或者常量。

p輸出的是乙個16進製制數, 輸出乙個指標的位址。

3、功能不同

*p是讓程式去那個位址取出資料。

p存放的是位址。

例子:1、int a[5]=;

int *p=a;//這是在定義指標變數p的同時就直接給它初始化,即把陣列a的首位址賦給它。

2、int a[5]=;

int *p;//宣告指標變數p

p = a;

擴充套件資料

(*p)操作是這樣一種運算,返回p 的值作為位址的那個空間的取值。(&p)則是這樣一種運算,返回當時宣告p 時開闢的位址。可以用賦值語句對記憶體位址賦值。

例:int *p;

p=2003h;

*p=3000h

結果:**p=*(*(p))=*(*(2003h))=*(3000h)=3000h。

&&p=&(&(p))=&(3001h),此時出錯了,3001h 是個常數無法存放位址。

*&p=*(&(p))=*(3001h)=2003h,也就是*&p=p。

22樓:ieio啊

兩者之間的區別如下:

1、表示的意義不同。

p是乙個指標變數的名字,表示此指標變數指向的記憶體位址,而*p表示此指標指向的記憶體位址中存放的內容。

2、數量形式不同。

p如果使用%p來輸出的話,它將是乙個16進製制數。*p一般是乙個和指標型別一致的變數或者常量。

3、定義不同。

p存放的是位址,而*p是讓程式去那個位址取出資料。

例子:#include

void main()

輸出結果為:3,3,4;

解釋:*p++:是先取出*p的值,再使p加1

//p是個指標,給p加1,相當於讓p指向了x所在位址的下乙個位置,而對於x則是沒有任何影響

(*p)++:是使*p的值加1.

//*p則是p指向的位置對應的值,題目中是*q,所以此時的*q就是x的值,為3,當輸出*q之後,再給*q即x自加1,綜上所述,x就會變為4

23樓:匿名使用者

先要理解位址和資料,你可以想象有很多盒子,每個盒子有對應的號碼,那個號碼叫做「位址」,而盒子裡放的東西叫做「資料」。

上面就段理解了,*p和p的區別就不難解釋了。

p是指標變數,用來存放位址,你可以認為是上面所說的盒子的號碼,「*」是解引用操作符,你可以把它理解成開啟盒子,*p就是開啟p號盒子,取出裡面的資料。

簡單來說,你記住,p存放的是位址,而*p是讓程式去那個位址取出資料。

pa是什麼含義,誰是指標變數,p還是p

int a 1 int p a p是指標變數 p指向a 注 此時 p表示p指向a的值,即 p 和 a 值是一樣的 當然也可以通過p改變a的值 p 3 此時a也等於3 int a,p a 這個語句定義兩個變數,乙個是整型變數a,另乙個是指標變數p,其指向a,或者說變數p中儲存a這個儲存單元的位址。p ...

指標裡面p和p有什麼區別,指標p p 和 p p 和 p分別有什麼區別????

p 表示先取出p指向的值,然後p指標再加1,也就是指向的內容變成了下乙個元素 p 表示p指標加1,直接指向下乙個元素,希望對你有幫助 1 y p 等價 y p y的值 p的原值 p的新值 p的原值 x相應的資料型別的長度 2 表示式p 不能看做是變數,p是先賦值,再自加一 我是自學c 這裡前一久學了...

p2b與p2p到底有何區別?哪個理財更好

p2b與p2p的具體區別 1 模式不同 p2p 個人對個人的模式 p2b 個人對企業的模式 2 借款物件不同 p2p 主要是個人也包括企業 p2b 借款方都為企業 3 信用抵押方式不同 p2p依靠單個人信用狀況,如工資收入 個人徵信記錄等 p2b的融資方多為企業,有抵押物。4 風控控制措施不同 p2...