C語言指標,int p和int p,其中p是不是相同的變數?為啥號的位置不同呢

時間 2021-09-11 22:29:10

1樓:_夢幻陽光

樓主對變數的概念還不是很瞭解

定義一個變數的時候,不管前面有多少東西,都是型別,只有最後面的是變數名

如:int a; //a為變數,改變數為int型

int b,int b;//這兩個是一樣的,b為變數名,int 為修飾的型別,此處為int行的陣列

int *c;//c為變數名,int *為修飾的型別,此處為int型的指標

struct student d ;//d為變數名,struct student 為修飾的型別,此處為student結構體

總而言之,可以用typedef表達以上所有的,

typedef int int;

typedef int arr;

typedef int * point;

typedef struct student struct;

然後這樣定義

int a;

arr b;

point c;

struct d;

這種定義方式和上面的完全一樣,希望對樓主有所幫助,望採納,謝謝

2樓:李示羊

int *p和int* p 是完全相同的。 *號位置不同只是不同的程式設計師的編碼習慣不同

一般int *p 會更普遍一點, 因為後一種寫法容易產生誤解, 比如下面這個例子

int* a, b;

這裡a是指標, b是整數, 但看起來很容易認為a,b都是指標, 寫成int *a, b;

就比較清楚了

3樓:勵若

是完全相同的含義,

c語法在某種程度上允許空格的存在。

比如int * p;

也是正確的。int和*,*和p之間多少空格是沒有關係的。

4樓:

一樣的沒什麼區別,怎麼方便怎樣寫

5樓:愛恆如夢

兩者定義的是相同的變數,只是形式不一樣。後者可以實現定義更復雜的型別。

6樓:

一樣,木有區別,只是後一種方便理解,後者相當於把int*看做是一種新的資料型別,即指向整型的指標

7樓:魯忙忙

p是相同的變數,只是定義的形式不同,兩種都行

c語言 如果我定義了一個指標 int *p 和變數 int p, 他倆之間有什麼關係嗎?

8樓:匿名使用者

int *p;

int a=1;

p=&a;

p定義成了bai一個整du型指zhi針,而a定義成了一個初始值為1的整型變數。

dao指標是用來儲存內對應容型別的變數的地址的,所以p=&a;的意思是用指標p來儲存變數a的地址。

而如果同時定義int *p;int p;會發生編譯時錯誤,因為p重複定義了。

9樓:匿名使用者

同一個作用域

內(比如同一個**塊),不能重複定義變數,所以int *p;

int p;這樣的**是不能通過版編譯的

如果是不同的權作用域,那麼它倆並沒有什麼關係若是類似下面的定義:

int a;

int *p = &a;

表示p儲存了a的地址,或者說p指向a。

c語言 *p 和p的區別?

10樓:楓璽

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。

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

12樓:匿名使用者

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

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

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

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

13樓:雲南新華電腦學校

一、表示的東西不同

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

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

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

14樓:匿名使用者

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

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

15樓:匿名使用者

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

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

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

祝學習進步!

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

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

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

16樓:匿名使用者

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

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

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

17樓:匿名使用者

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

18樓:民大幽靈

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

19樓:傲世修羅王

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

20樓:惡魔王子

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

c語言指標,如果p=&k,則p是指標變數,那麼*p也可以看做指標變數?形參為啥可把*p看做指標變數啊?

21樓:金色潛鳥

注意分清 語句和宣告。

外貌都是 *p, 在語句 和 在宣告 意思不同。

------------------------------p=&k; 這顯然是語句。語句裡 &k 是變數 k 的 地址,能接受賦值的 p 是指標。

所以,它們的宣告很可能是:

int k; int *p;

-------------------------------形參 書寫 是用 宣告的形式,例如:

void add(int a, int b, int *p);

形參 int *p -- 用的是 宣告的形式,p 是指標。

-------------------------------宣告為 int *p; // p 是 指標 變數語句中 *p 是 指標指向的值,p 是 地址。

k = 20;

p = &k; // 地址

printf("%d\n", *p); // 列印數值printf("%p\n", p); // 列印地址*p = 10; // 值

a = *p; //值

22樓:匿名使用者

簡單的說在起初主函式定義是必須 *p=&k之後使用p就是指標變數,*p是個變數,

在函式呼叫中如果實參是p(指標變數),則形參對應是個指標例如 *a(形參列表指標)=p(實參列表指標) 等於 *p(形參列表指標)=p(實參列表指標)

23樓:

誰說的形參int *p中*p是指標?*是int的,不是p的,int *p是說p是int *型指標,而不是說*p是int型變數!變數都得以下劃線或字母開頭你忘了?

以*開頭怎麼會是合法識別符號!

24樓:匿名使用者

int *p;

求解如何將*p看成一個指標變數。怎麼看都只會是一個int。

c語言指標**p是什麼意思

25樓:丿

**p :二級指標,表示p所指向的地址裡面存放的是一個指向型別的指標。

*p:一級指標,表示p所指向的地址裡面存放的是一個型別的值。

擴充套件資料

指標變數可以進行加減運算,例如p++、p+i、p-=i。指標變數的加減運算並不是簡單的加上或減去一個整數,而是跟指標指向的資料型別有關。

給指標變數賦值時,要將一份資料的地址賦給它,不能直接賦給一個整數,例如int *p = 1000;是沒有意義的,使用過程中一般會導致程式崩潰。

使用指標變數之前一定要初始化,否則就不能確定指標指向**,如果它指向的記憶體沒有使用許可權,程式就崩潰了。對於暫時沒有指向的指標,建議賦值null。

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

陣列也是有型別的,陣列名的本意是表示一組型別相同的資料。在定義陣列時,或者和 sizeof、& 運算子一起使用時陣列名才表示整個陣列,表示式中的陣列名會被轉換為一個指向陣列的指標。

C 中,給指標賦值時,int P和

臺藻趙玥 都是定義了乙個指標變數,然後把a的位址複製給這個指標變數,效果基本是一樣的。稍微的區別是,乙個是直接賦值,乙個是先定義,後賦值。區別在於,第二種先定義,後賦值的情況,如果定義與賦值間還有其他 那麼p指向的位址是未知的,所以使用的話會有未知行為。如果定義與賦值是連續的語句,那麼上述兩個內容就...

p(int a是什麼意思,“int p”和“int p”有什麼區別?

問問題不要斷章取義。p int a這個不是一個完整的語句,前面後面都可能省略內容。float b 3.14,a b int p int a 這個才是完整的,前面有int 後面有分號。表示將指標a的型別轉換為整型指標再賦給p。 鈄問青 你好!int p m 定義的陣列指標,表示定義一個指標變數,此指標...

C 中,intp 和int a怎麼會是型別呢

int b 2 是一維陣列,其位址型別是 int int a 1 2 是二維陣列,其位址型別是 int 2 凡是陣列指標都涉及乙個概念,那就是元素對齊和列對齊。什麼是元素對齊?int b 2 定義了乙個一維陣列,該陣列每個元素型別是int,而乙個int資料占用記憶體4位元組 32位系統 也就是說元素...