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

2021-03-03 21:54:40 字數 5757 閱讀 8209

1樓:清_晨

int a = 1;

int *p = &a; p是指標變數 ,p指向a; (注:此時*p表示p指向a的值,即*p 和 a 值是一樣的)

//當然也可以通過p改變a的值

*p = 3; //此時a也等於3

2樓:

int a,*p=&a;

//這個語句定義兩個變數,乙個是整型變數a,另乙個是指標變數p,其指向a,或者說變數p中儲存a這個儲存單元的位址。

*p=5; //這個語句表示給p所指單元賦值,相當於a=5。

p是指標變數,*p=a和p=&a的區別

3樓:

1*p=a; //表示將a的值賦給p所指單元。

p=&a; //表示將p指向a單元,即將a單元的位址賦給p。

2int a,b;

int *pa,*pb;

a=10;b=20;

*pa=a;*pb=b; //這兩個語句有問題。pa,pb是野指標,沒有指向任何單元。

printf("%d,%d\n",*pa,*pb);

printf("%x,%x\n",pa,pb); //pa,pb的野指標,其值不確定。

printf("%x,%x\n",&a,&b); //輸出a,b的位址。

4樓:金色潛鳥

分清是語句裡還是宣告裡。

宣告 裡 int *p=a; 宣告 *p 是 int 型指標,初始化,讓 p 指向 a [陣列] 的始位址。

宣告 裡 int p=&a; 宣告 p 是 int型變數,不是指標,初始化,把變數 a 的位址 &a 賦給 p.

語句裡,若 p 是指標變數,

*p=a; *p 表示 值,把 變數 a 的當前值 賦給 指標。(指標指向的位址不變)。

p = &a; p 表示指向的位址, 把 變數 a 的位址 &a 賦給 p, 也就是讓指標指向 變數 a。

例如:int a=2, b=3;

int *p=&b; // 指標指向位址 初始化, 指向 b

printf("address: %p value:%d\n", p, *p); //輸出位址同 b, 數值 3

*p=a;

printf("address: %p value:%d\n", p, *p); //輸出位址同 b, 數值 2

p= &a;

printf("address: %p value:%d\n", p, *p); //輸出位址同 a, 數值 2

---------------------

5樓:匿名使用者

這段**在一些編譯器是編譯不過的,因為你沒有給pa,pb賦值,pa,pb兩個指標指向**,根本不知道

*p=a 和 p=&a是完全不同的兩碼事

*p 是 p 指向的位址的值,改變了值不是改變了它的位址,而p=&a就是改變p所指向的位址,使之指向a

舉個例子說明一下

p=&a; //p儲存的是a的位址

*p=b; //並不是p儲存了b的位址,而是將b的值儲存到p所指向的位址的那個值,這句相當於a=b,最後改變了a的值,而非p所指向的位址

6樓:匿名使用者

最關鍵的錯誤在pa和pb這兩個指標沒有初始化,

當執行*pa=a;*pb=b;時結果不可預期, 很可能程式應崩潰掉的.

7樓:匿名使用者

區別很明顯,*pa=a,*pb=b只是說記憶體pa位置存放的值是等於a並不是pa指向變數a的位址單元,因此輸出的位址是不一樣的。

*p=&a,*p=a和p=&a各是什麼意思,有什麼區別?

8樓:匿名使用者

表示式的意思:

1、*p=a的意思:將a的值賦給p指標指向的位址的值;

2、p=&a的意思是:將a的位址賦給指標p;

3、*p=&a的用法錯誤。

區別在於:

p=&a就是用a的位址對p賦值,a是乙個變數,&a就是儲存這個變數的記憶體位址,指標儲存的就是乙個位址,*p就是這一位址中的內容。

擴充套件資料另類*和&

兩個地方要注意: 在程式宣告變數的時候的*,只是表明「它是乙個無符號整數,這個整數指向某個記憶體位址,一次訪問sizeof(type)長度」。這點不要和(*)操作符混淆;

在c++程式宣告變數的時候的&,只是表明「它是乙個引用,這個引用宣告時不開闢新空間,它在記憶體分配表加入新的一行,該行記憶體位址等於和呼叫時傳入的對應引數記憶體位址」。

這點不要和(*)宣告符,(&)操作符混淆。

9樓:匿名使用者

1.一般來說*p=&a的表示方法是錯的,*p=a和p=&a是正確的。

2.*p=a的意思:將a的值賦給p指標指向的位址的值;

3.p=&a的意思是:將a的位址賦給指標p;

4.區別:*p是乙個值;p是乙個位址;兩者完全不相同。

5.*代表著p指向的位址的值,簡單來說就是取值;&是取位址符號,取的是位址;p是指標,可以理解為所指向的值的位址,*p就是取p指標指向的位址的值,&a就是取a的位址。

10樓:匿名使用者

*是解引用運算子 &是取位址運算子

11樓:小小小子

int *p=&a;

和int *p;pa=&a;等價

這裡的*是乙個指標說明符,不是間接定址運算子,我剛好看到這一點分享一下,前面幾個人都說這種是錯誤的,估計理解錯了吧

12樓:千古1帝劉公嗣

直接看**執行結果就

清楚了。

#include

int main()

13樓:匿名使用者

這個問題如下所述:

int b=5;a=10;// 定義變數a,並賦值為10;b=5

int *p=&b; //定義指標變數p,並且讓指標p指向變數b,其中 & 為

//取位址運算子

*p=a; //是將a的值就是10存放到指標p指向的變數b,這樣b的值不再是

// b=5,而是變成b=10

p=&a;// 這句是改變p 的指向,讓p指向變數a。例如還有下面的語句

*p=123; //那麼這樣後就會有p指向的變數的值為123.此處是a=123.

14樓:匿名使用者

& 取位址符 值相當與指標

* 取對應位址字元 型別與該位址所儲存的變數型別一樣

15樓:匿名使用者

*p=a是p取a值

而p=&a是取a 的記憶體位址

16樓:匿名使用者

第乙個&是指引用吧,*p=&a意思是p所指的值為a的引用

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

17樓:匿名使用者

1、內容不同

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

2、資料型別不同

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

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

3、使用方法不同

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

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

18樓:凌亂心扉

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

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;是非常危險的,有可能造成程式奔潰。

19樓:仁0者

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

p=&a;

則:p=1000

*p=2

20樓:匿名使用者

p是乙個記憶體位址值

*p是位址p指向的內容

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

21樓:匿名使用者

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

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

22樓:樂酷科技

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

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

23樓:匿名使用者

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

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

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

1 內容不同 星號是用來指定變數p是指標,p是乙個變數,其值為另乙個變數的位址,它表示了在記憶體中的乙個位址,即,記憶體位置的直接位址。而 p是所指向位址的值。2 資料型別不同 在程式宣告變數的時候的 只是表明 它是乙個無符號整數,這個整數指向某個記憶體位址,一次訪問sizeof type 長度 所...

C語言中指標變數與普通變數的區別是什麼

int a int p a 指標p是乙個變數,裡面存的是乙個位址,這個位址是a的位址。通過取值運算子 就可以用p訪問a。指標變數使用起來靈活,乙個指標變數只佔四個位元組,但是它可以訪問類似結構體,鍊錶,陣列等多資料集合,而且在訪問這些變數的時候是對記憶體直接訪問,執行效率更高,知識需要慢慢積累,用得...

我是誰,誰是我?生存的意義是什麼?為什麼我還活著

你是乙個生命體 性格,學識,愛好,理解力,以及身體的外部特徵這些就像資料,由不同資料組成的生命體都是乙個獨特的存在,沒有兩個完全一樣的人,由所有你所擁有的特徵組成的這個生命體就是你 何必非要給自己制定意義,沒有意義就沒有侷限,可以有無限發展的空間,每個人在自己的生命中都是主角,但從宇宙角度看,整個人...