C 語言宣告指標的時候 int p 到底是什麼意思?

時間 2021-05-05 23:44:46

1樓:

這個回答挺到位的呢,剛剛看的,分享下

2樓:虛實道長

我憑感覺回答:

1.反對譚浩強的教材誤導。

c的優勢在於指標。乙個函式,有了指標,再也不用看返回值臉色了。不再受限於返回值。

如果說函式的輸出來自於返回值,那你的函式原型得多複雜?介面得多易變?函式的返回值是void一點關係都沒有,都通過指標來控制顯示(交換指標不修改記憶體),或者控制修改(修改指標變數指向的內容,甩開了返回值的限制)。

2.指標更傾向於指向首位址。

那麼大小怎麼控制呢?前面的型別修飾。int,char其實是size的描述。我猜,儲存首位址和size這2個變數,就足以告訴計算機去把記憶體中真正的資料取出來了。

3樓:

p是乙個32位,或者是64位的整數,賦值代表把int的位址,存入這個p這個整數裡。*p表示找一這個位址(p的資料),把這個位址之後的4位元組資料解釋為int型別。

4樓:Belleve

很不幸的是,C 的宣告是解方程,最「正確」的理解是「宣告乙個變數 p,它的型別必須滿足『*p 屬於 int』」複雜的也一樣:

void(*

signal

(int

sig,

void(*

func

)(int

)))(

int)

表示「signal 可以被呼叫,接受 int sig 和 func,其中 (*func) 也可以被呼叫(接受 int 返回 void);其返回值解引用後可以被呼叫,接受 int 返回 void」

ps. C# 的話剛好相反,「int* p」裡面「int*」是整體,表示乙個完整的型別

5樓:

跟int a一樣理解啊。。。申明了乙個變數,變數的型別是int *,變數的值是乙個位址,你可以對這個變數做賦值,初始化等等操作,然後由於它特殊一點,與a相比,你還能對它做*p這種操作。。

6樓:

定義跟使用是兩碼事,定義int *p;p=&a;這兩句可以完成定義與賦值兩個操作。就跟你為什麼可以int a=1;是一樣的道理。*在定義的時候是告訴計算機這是乙個指標,而不是普通的變數。

7樓:「已登出」

int* p;

這種宣告的意思是:首先,變數p是指標型別(所謂的指標型別,實質上指標型別存貯著某個記憶體位址)。其次,int* 表示的是:

p指標所指向的那個記憶體單元儲存著乙個int型別的變數,然後,計算機讀取資料的時候就會從改位址開始自動讀取4個位元組,這4個位元組組成的int就是你想要的那個資料,否則就會出錯。最後,一般來說,宣告指標的時候必須初始化,也就是說宣告指標的時候必須給出它所指向的位址,如果實在沒有,那就宣告它為空指標,否則之後會出錯滴。。。語法:

int* p(nullptr);

int *p = &x ;

請注意:題主少了乙個分號哦。這句話的意思是,不僅宣告了指標,還給出了指標所指向的位址。&運算子是取址運算子,它會得到變數的記憶體位址。

這樣看上去好像是把 &x 賦值給了 *p,然而事實上是賦值給了 p

上面這個問題本身就不對,int* p和int *p是一樣的,之所以加乙個*符號是表示p是乙個指標。但是p和*p是不一樣的,p代表的是記憶體的位址,而*p是指向的那個記憶體位址中的資料。

然後這個問題正確的表示式

「這樣看上去好像是把 &x 賦值給了 p,然而事實上是賦值給了 p」。

8樓:乙隻大黃

*在指標定義中和使用中是2個含義。

定義指標p的時候,*只是告訴編譯器這個變數p是個指標,前面的int是這個指標指向的儲存器放的int型別資料。

而在使用時,*p裡的*才是指標運算子,表示取出指標p所指向的儲存區里的資料。

第一次答題⊙▽⊙,粗淺見解~

9樓:丁冬

int *p; // 表示*p是個int?

/////

《C和指標》自已為是地搬出了這個看起來很有道理的解釋。

其實就是為了防止誤解int *a, b。其他說多了都是扯。

【找到一種「看起來很有道理「的解釋很容易。】

10樓:馬中斌

如果了解一些組合語言的知識會更有助於你理解int *p,其中*是其修飾作用的,申明了p是指標型別的變數。一般你說它是指標或者變數都是正確的。如果非要深究,只能說是一些grammer的規定。

從實際意義上理解,任何特定型別的」資料「儲存都是要占用空間的,當然要對其進行定址。int *p是申明,即變數p中存放的是另乙個int型別變數的位址,要訪問或者得到這個int變數本身的值則用*p。

希望有助於你理解

11樓:

哈哈哈,沒想到這是我第乙個回答的計算機問題我覺得你看成 int* p = &address 是不是順眼多了?

p是乙個int*型別的指標

空格其實是按照習慣新增的

換個角度看看會很好。

12樓:薛非

C 語言宣告指標的時候 int *p 到底是什麼意思?

因為p前面有*,所以p是指標;又因為剩下的是int,所以這是指向int型別的指標是說宣告了乙個變數 p,它的型別是乙個 int 型指標(int* p)

還是說宣告了乙個指標 p,而 *p 是乙個 int ?(int *p)後者。

int *p = &x

這樣看上去好像是把 &x 賦值給了 *p,然而事實上是賦值給了 p這種想法很奇怪。

int a[2]=;

你難道會覺得是賦值給了a[2]?

C語言指標int p 4 如何理解?

Dawson 我是這樣記的。從左到右結合,沒有小括號的話,重點在陣列,因此是指標陣列,每個陣列元素都是指標。有小括號的話,重點就是指標,因此是陣列指標。是乙個指向陣列首位址的指標。 路漫漫其修遠兮 int p 4 p是指標,指向長度為4,元素型別為 int 的陣列 int p 4 p是陣列,長度為4...

c 在宣告結構指標變數的時候,會分配記憶體嗎?

瀉藥!函式clone沒有在堆上動態分配記憶體。struct S const structS clone structS R const structS bar structS R 生成中間表示式 struct.S type define arm aapcscc dereferenceable 1 s...

C 中宣告 const 乙個指標到底宣告的是什麼?

二圈妹 要知道指向常量的指標 pointer to const 和常量指標 const pointer 的區別 僅僅要求這個指標指向常量,我們可以修改指標的指向,甚至可以讓它指向相應的非常量資料型別 常量指標是指向的位置不變,它不一定需要指向常量。更詳細的 二圈妹 const 搭配指標和引用 C P...