c語言中p,p,p到底有何關係如f intp

2021-08-11 19:13:51 字數 5966 閱讀 8525

1樓:風若遠去何人留

p代表自身值.

*p是用來操作指標的, 取指標指向的值.

&p 操作任何變數, 用來取變數地址.

如果p是int*型,

那麼*p是int型.

&p是int**型.

2樓:高樓尋縫

可以這樣理解。

int *p; p就是一個變數,存放一個值。這個值有點特殊,它是個儲存空間的地址。這是,p成為指標變數。*p如果出現在表示式中,表示一個值,這個值為p中存放的地址處的內容。

int p;的情況下,p也是一個變數,存放一個整型值。&p也是一個特殊值,這個值為p這個變數在儲存空間中的地址。

3樓:匿名使用者

通俗點兒可以這麼說,p是一個指標,*p是p所指的內容;&p是指標p在記憶體中的地址

4樓:匿名使用者

f(int *p) //宣告瞭一個整形指標p f(int* p)表示在f函式的引數

f(&p) 這是個函式呼叫 傳遞的引數為變數p的地址 &取地址符

printf("%d\n",p) 輸出變數p的值eg.int a;

int* p=&a

c語言*&p和&*p怎麼算的?他們有什麼不同?

5樓:拍子

1、*&p 等價於*(&p)。

2、&*p 等價於&(*p)。

舉個例子:

p是int變數,那麼*&p = p,而&*p是非法的。因為*p非法。

p是int *指標變數,那麼*&p = p,&*p = p,都是p。

printf("%d\n",*&p)中不知道p是什麼型別。

如果p是一個指標,則*&p和&*p一樣。

如果p是一個變數,比如int p =1;那麼*&p = *(&p) = 1(即從p的地址取值),而&*p = &(*p) 則非法,因為p=1,*1是取記憶體地址為1的值,這在c語言中是不合法的。

計算機c語言中 int *p; p=(int*)malloc(sizeof(int)); 什麼意思

6樓:匿名使用者

申請一個int大小的記憶體空間,這個空間的地址以int型別賦給p。

7樓:

動態申請一塊記憶體,長度為一個int的位元組數,視作業系統16/32/64而定。

記憶體首地址儲存在變數 p 中。

8樓:匿名使用者

int *p;//定義一個指向整型的指標變數p=(int*)malloc(sizeof(int));

/*建立(動態申請)一塊記憶體空間專,屬建立的記憶體空間為一個整型變數的長度,並把建立的空間地址轉化成指向整型的指標賦值給前面的整型指標變數p*/

如果這塊動態記憶體不釋放,相當於把一個整型變數的地址給前面的指標例如:#include

#include

int main()

c語言 *p 和p的區別?

9樓:楓璽

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。

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

11樓:匿名使用者

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

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

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

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

12樓:雲南新華電腦學校

一、表示的東西不同

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

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

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

13樓:匿名使用者

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

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=3p=某地址+4/8(根據系統位數是4或者8),p=隨機值-----

q=3q=4

14樓:匿名使用者

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

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

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

祝學習進步!

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

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

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

15樓:匿名使用者

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

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

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

16樓:匿名使用者

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

17樓:民大幽靈

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

18樓:傲世修羅王

這種只有你慢慢去理解,時間長了就懂了,別指望一下就懂了

19樓:惡魔王子

p是指一個變數,它代表一個數值,*p則代表一個地址

解釋下指標*p p &p的關係

20樓:萬能導師

使用*定義指標,例如char*p;

p是一個字元的指標;

如果在定義時沒有使用100*,那麼取指標指向的記憶體的值;

例如:inta[]=,3,5,7,9{1},*p;

p=一個;

所以乘以p等於1;

& and是地址操作符,例如,& and是變數p的地址;

比如:# include < stdio . h >

main()

{int[]={1,2,3,4,5},*p=;

printf("%d\n」*p);

printf("%d\n,p);

printf("%d\n」);

printf("%d\n」代替);

擴充套件資料:

指標變數可以加或減,比如p++、p+i、p-=i。指標變數的加和減不是簡單地加或減一個整數,而是取決於指標指向的資料型別。

當給一個指標變數賦值時,要把一段資料的地址賦給它,而不是直接賦給一個整數,比如int*p=1000;這是毫無意義的,通常會導致程式在使用過程中崩潰。

確保在使用指標變數之前初始化它,否則您將無法確定指標指向的位置,如果指標指向的記憶體不允許,程式將崩潰。對於當前度不指向的指標,建議使用null。

可以減去兩個指標變數。如果兩個指標變數指向同一個陣列中的一個元素,那麼減法的結果就是兩個指標之間不同元素的個數。

陣列也是有型別的,陣列的名稱表示一組相同型別的資料。當您定義一個陣列,或者與sizeof, &操作符一起使用它時,陣列名稱表示整個陣列,並且表示式中的陣列名稱被轉換為指向陣列的指標。

21樓:冷123波

定義指標時用*,如char *p;

那麼p就是一個指向字元型的指標;

如果*不在定義時用,那就取指標所指向記憶體的值,如int a=,*p;

p=a;

那麼*p就是1;

&是取地址運算子,如&p就是取變數p的地址;

下面這個例子:

#include

main()

,*p=a;

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

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

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

printf("%d\n",&p);

}輸出結果為:

11245036(各人的電腦可能不相同)

1245036(各人的電腦可能不相同)

1245032(各人的電腦可能不相同)

從結果可以看出,

*p為所指向的地址的值

p為所指向的地址,即a的地址

&p為指標變數p的地址

C語言中ascii碼錶有什麼用,C語言中ASCII碼值是什麼意思

計算機中,所有的資料在儲存和運算時都要使用二進位制數表示 因為計算機用高電平和低電平分別表示1和0 例如,象a b c d這樣的52個字母 包括大寫 以及0 1等數字還有一些常用的符號 例如 等 在計算機中儲存時也要使用二進位制數來表示,而具體用哪些二進位制數字表示哪個符號,當然每個人都可以約定自己...

c語言中a 和 a有什麼不同,c語言中 a a 和 a 的區別

作為單獨的語句,來a 與 a 並沒什源麼區別 但是b a 和b a就有區別了 baia 這個式子du的返回值是 zhia,所以daob a 相當於b a,然後a a 1 a的返回值是a 1 所以b a相當於a a 1 然後b a c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能...

c語言中整數和整型有什麼不同,C語言中,整型常量和長整型常量,有什麼區別

整型bai常量就是平 時算術上寫du的沒有小數zhi點的整數,由阿拉伯數字dao1234567890組成,整型常量包括正回數答負數和0。常量是說從程式開始到結束,數值始終保持不變的量。整型變數用變數名字表示。整型變數的數值從程式開始到結束可能變化,例如運算和輸入。類似代數裡的x,y,z.所有程式語言...