c語言中,設p是指標,p x與p x有什麼區別

2021-04-18 03:48:42 字數 5760 閱讀 6276

1樓:匿名使用者

前者是在定義指標時才成立,意思是定義指標p是變數x的地址。後者是程式語句中的取x地址賦值給p。

2樓:聽不清啊

*p=&x是在定義變數時;

p=&x是在定義變數後。

int x,*p=&x;

或:int x,*p; p=&x;

3樓:匿名使用者

兩個語句不可能同時出現,必然有一個是錯誤的。

*p=&x:指的是指標p的」值」是一個指向x的指標;

p=&x:指的是指標p指向x。

有關運算子 p=&x,*p=&x有什麼區別

4樓:重定向的憂傷

我簡單解釋一下

如果p是一個

int型別的指標,x是int型別,p=&x就是p指向x所在的記憶體地址如果p是一個內int指標型別的指標,

容x是int型別,*p=&x就是讓指向的int型別的指標指向x所在的記憶體地址,前提是,你已經為p開闢了空間,不然p指向的記憶體不安全。

如果*p=&x這句話處於一個定義的位置 例如 int *p=&x,那麼就相當於定義了一個int型別的指標p,指向x所在的記憶體地址。 這個時候,*不是取值的意思,而是定義指標的符號。

建議題主好好去看一下c語言的課本,只要搞清楚指標是什麼,取值是什麼,取地址是什麼,這些問題就完全不是問題。

c語言中指標*p=*q與p=q有什麼區別

5樓:

若p和q是申明為型別相容的指標變數,且都正確賦有合法值且不為null,那麼,*p=*q是把指標q指向的目標值賦給指標p指向的目標;p=q則是使指標p指向指標q指向的目標(最終是p和q指向了同一目標,這個目標就是q指向的目標)。在q==null時,*p=*q非法操作,p=q是合法操作(使p和q同為null)。綜上,除q為無效(null)時不能取值操作外,正常情況下*p=*q操作的是指標指向的目標,p=q操作的是指標本身——這是二者的本質區別。

以下**可以驗證:

#include "stdio.h"

int main(int argc,char *argv)驗證結果如下:

6樓:管迪勵素華

參***:我是這樣認為的:*是指標運算子。我們曾可以這樣去定義:int

a[10],*p,**s;

如果在下面的語句中出現了*p=a;

這就意味著指標p已經指向陣列的首地址,也就是a[0],此時我們可認為指標p是一級指標.

如果在下面的語句中出現了*s=p,

這就意味著指標s指向了p的單元,而p指向了a[0]此時s離陣列的首地址形象的像隔了2級

因此稱s為2級指標.

對於2級指標,有**s=*(*s)=*p=&a[0]

7樓:匿名使用者

*p=*q,意思是說,將q指標指向地址的值傳給p指標指向的地址,此時p和q是指向不同地址的(當然是在原先p和q就不同的情況下)而p=q呢,則是說將q指標指向p指標指向的地址,此時pq指向同一位置,共享同一段記憶體

8樓:匿名使用者

指標指向的是一個地址,但這個地址裡面可能是一個變數,也可以是個常量,或者是其它型別...

p=q只是一個變數間的傳資料傳遞

9樓:匿名使用者

1)*q是指標所指向的一個字元,所以把一個字串賦值給一個字元,顯然是錯誤的.

2)c語言不進行強制的型別識別,所以一個字元可以以數值形式賦值,實際你賦值的內容是它的ascii碼,也就是'd'

3)c語言中字串不能直接給指標賦值,而應該使用函式:strcpy,strncpy.函式原型為:

char *strcpy( char *strdest, const char *strsource );

char *strncpy( char *strdest, const char *strsource, size_t count );

4)printf函式中使用字串時,應該直接使用指標.而不帶*

5)從這句:*p=&x;來看,p是指標的指標,所以*p是指標,所以用法是正確的.

從以上分析得出幾點結論:

1)c語言對資料型別不會進行強制識別,字元型資料可以賦值為數字,字元指標可以指向數字,指標本身也會有指標.

2)指標只是指的一個地址,這個地址本身也是資料.如果把這個地址當作字串使用的話,一定要直接使用指標,如果使用形如*p這樣的用法的話,只是指的p指向的首地址的字元.

any more problems?

10樓:匿名使用者

*p=*q 是指向地址

p=q是指向值

11樓:鏡面世界

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

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

比如定義了指標int *p,x; p=&x; 那p,*p,&p,*&p各代表的是什麼

12樓:匿名使用者

p是指向int 型別資料的指標,&p是指標p的地址,也就是指向指標的指標,*&p是指標的指標指向的數值.

c語言 *p 和p的區別?

13樓:楓璽

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。

14樓: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

15樓:匿名使用者

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

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

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

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

16樓:雲南新華電腦學校

一、表示的東西不同

*p表示p代表相應資料型別在儲存

單元中儲存的首地址,而這個儲存單元儲存的是相應型別資料的數值。

**p表示p也表示地址,簡單的說,這個地址對應的儲存單元儲存的數也是一個地址,而不是數值,而這個被儲存的地址對應的儲存單元儲存的資料才是真正的相應型別的數值。

17樓:匿名使用者

借用一樓的回答,列印的時候,你可以參照下述列印,可能你就明白了。

int x = 3;

int *p, *q;

p = &x, q = &x;

printf("p=%p,p=%d\n", p, *p);

printf("%d\n", *p++);

printf("p=%p,p=%d\n", p, *p);

printf("-----\n");

printf("%d\n", (*q)++);

printf("%d\n", x);

你列印的結果應該是:

p=某地址,p=3

q=**=某地址+4/8(根據系統位數是4或者8),p=隨機值-----

q=3q=4

18樓:匿名使用者

char *p其實也可寫成char* p

char*表示指向char型別的指標

這時p就是指標,*p是指向的char變數

祝學習進步!

等你熟練使用指標的時候,一切都是指標,連陣列和函式,都變成了指標。之所以使用指標是因為,很多情況下,編譯和執行內部,都採用轉化成指標的方式,所以使用指標可以優化程式

指標的使用沒有要求,也沒有限制,隨個人對指標掌握的程度。

常見的如,對字串的操作,傳值呼叫,陣列,函式,等等。

19樓:匿名使用者

在你家裡有一部**p,你要給中國銀行打**怎麼辦?你就使用**的記憶功能找出中國銀行的**號碼p,這個號碼是指向中國銀行的。我們就能通過這個**號碼訪問中國銀行*p(*p表示中國銀行提供的功能)

號碼儲存在p中,*p是通過**號碼訪問到中國銀行這個值

還有一點。你家**總有一個地方擺放吧,也就是說你加**p也是有一個地址的這個地址就是」你家"也就是&p

20樓:匿名使用者

void ergod(void (*doit)(int))}void printa(int a)

void printb(int a)

int main()

這是一個函式指標的應用

執行時根據你傳的不同的函式指標而執行的不同的操作列印出b:0

b:1b:2

b:3b:4

b:5b:6

b:7b:8b:9

21樓:民大幽靈

第一個:p為帶回一個指標的函式,該指標指向double型資料,第二個:p是指向函式的指標,該函式返回double型值

c語言中,p為指標,那麼p和p是一樣的嗎,有什麼區別呢

區別為 windows 7,中文名稱視窗7,是由微軟公司 microsoft 開發的作業系統,核心版本號為windows nt6.1。windows 7可供家庭及商業工作環境 膝上型電腦 平板電腦 多 中心等使用。c語言是比較基礎的程式語言,是學好組合語言的基礎,所以學好c語言很重要。在資訊工程中,...

C語言中程式用指標有什麼優勢麼,C語言中一個程式用指標有什麼優勢麼?

指標可以方便地訪問字串 我們程式執行的時候可使用的記憶體可以分成棧和堆。堆的空間很大,用指標可以很方便地操作堆。選擇法與冒泡本質沒有什麼區別,唯一優勢可以少做幾次交換。可以直接讀取記憶體上的資料,可以增加程式的效能,可以裝b 排序中,冒泡法我覺得是平均下來最慢的演算法,因為它要遍歷所有元素 嚕啦啦嚕...

c語言中,p1的計算優先順序,c語言中運算子有哪幾種,優先順序順序是怎樣

這是複合賦值表示式。等同於 p p 1 指標p所指向的內容加1後儲存到指標p所指向的地址中。所以,優先順序是先算 在這裡 運算子並不是乘法運算子,而是指的間接引用運算子,然後再算 運算子。運算子的優先順序高於符合運算子 即 p 1的功能等同於 p 或 p 也就是說,增加的是p指向的內容,而不是改變指...