-
1 # 成都朗沃教育
-
2 # 電機技術大講堂
本質意義就是告訴編譯器怎麼編譯,比如keil或vc++6.0在編譯的時候,變這行c程式碼轉換成與之對應的機器碼,比如定義int *a,告訴編譯器a是指標變數,編譯成的機器碼是操作指標的機器碼,而沒有加*定義的就是整型變數,編譯出來的機器碼就是操作int變數的機器碼,程式最終執行時都是在執行機器碼,
-
3 # 閒人老盧
*運算子在變數宣告時的本質是要求C語言提供一個“盒子”,裡面儲存另一個“盒子”的位置標籤。當你讀取這個盒子裡的內容,就知道另一個盒子在哪裡。*運算子在變數引用時表示根據盒子裡的另一個盒子的位置,把另一個盒子裡的內容取出來(或存進去)。
-
4 # Jokerjoy
指標指向的是記憶體地址。
使用指標操作地址時候,使用的是定義指標時使用的資料型別來操作。
*的含義就是,使用定義指標時所定義的型別來操作指標。
例如:int *p = &x; 表示定義了整形指標,指向了變數x所在的記憶體地址,那麼 *p 就是向p所指向的空間讀取一個整形資料的長度。
-
5 # 一隻沉思的程式猿
表示一個記憶體位置。如果這樣寫***,以此類推,理論上c可以支援n層指標(如果你寫程式時大腦能記清楚的話)。一般**兩層指標用的較多,也不容易記混。如果再多都燒腦了,不方便寫程式。
-
6 # 手機使用者51420656367
總結一下:
1.*首先是一個算術運算子;
2. 定義一個指標,比方說下面的定義語句:
int a;
定義了一個變數a,其資料型別是int;
再看下面的定義語句:
int *b;
定義了一個int * 變數,怎樣理解int*呢?可以這麼來:
*b是int型的,它對應一個儲存單元,裡面可以存放int型資料,而這個單元的地址就存放在b中,此時b就是一個int *的資料. 於是,可以執行下面的操作
a=*b;
但是反過來這樣操作就是錯誤的
b=a;
要用一個int型的變數給int *的變數賦值,則必須使用
b=&a;
講到這,具有指標型別的形式引數的函式呼叫方法也就清楚了.
對*的理解要注意兩點:
1.出現在變數定義語句中時,與資料型別結合,表示相應資料型別的指標;
2.出現在一般語句時往往和指標變數結合,即指標變數指的儲存單元.
-
7 # 深夜老王
解引用運算子。
舉個例子,定義一個指標 int *p = &a;
我們知道p是一個指標,指向了變數a,那我要透過p來訪問a代表的那塊記憶體、也就是p指向的那塊記憶體怎麼辦?*p就表示p指向的那塊記憶體儲存的資料。
-
8 # 前沿小子
除去乘號外,*運算子的應用有兩個。
1.指標型別的定義和宣告,例子:int *p; 這個代表宣告一個int型別的指標,它指向一個int型別的資料;
2.解引用,就是將地址或者記憶體中的內容拿出來,用於使用者操作,例子:int* p=“I love china”;*p內容是I,如果想要訪問所有的內容,採用指標的加減運算即可
-
9 # C語言答疑課堂
這個問題問的很好啊,C語言中的這個破星號,搞暈了多少人。
* 運算子的本質我認為有兩個:一個是宣告指標時使用,一個是取指標的“他值”時使用,具體如下:。
1. 在指標宣告時使用
在宣告一個指標時候,是要加上星號的,比如: int *pInt = NULL; 這裡的星號沒別的意思,就是告訴編譯器,pInt是個指標。 好,下面第二點才是關鍵。
2. 取指標的“他值”時使用
在程式碼中使用指標的己址維度時,不需要加星號;
在程式碼中使用指標的己值維度時,不需要加星號;
在程式碼中使用指標的他值維度時,需要加星號;
在程式碼中使用指標的他址維度時,不需要加星號;
在程式碼中使用指標的他型維度時,不需要加星號;
所謂的“他值”,就是指標指向的那個地址中儲存的資料值。比如: int a = 1; int *p = NULL; p = &a; 那麼指標p的“他值”就是1。
綜上所述,*這個運算子,本質是一個是用於宣告指標,一個是用於取出指標的他值。 指標有啥呀,也就這些東西而已。
回覆列表
*是解引用運算子,它對一個指標起作用,效果是返回該指標指向的地址對應的左值。然後你就可以對這個左值讀取、賦值了。這就是標準的理解方法,不要看些部落格文章有的沒的發明的新名詞。
> int ch;> int *cp;> *(cp+1)作為左值是合法的>但是(cp+1)就不能作為左值
(cp+1)操作返回的是右值,型別是int*,因為它返回的東西是個臨時的指標變數,當然是右值。所以你需要解引用才能將其變成int型別的左值。或者你可以把它儲存成一個具名的變數(比如說 int* cp2 = cp + 1;),變成int*型別的左值。
似乎C語言那邊比較傾向於特殊對待指標這個東西,比如理解 int *p; 這種宣告的時候傾向於理解為“型別是int,宣告一個指向該型別的指標p”。不過以我個人經驗,你跟C++一樣把指標就當成型別系統的一部分其實是更好理解的。比如剛才那個p,型別就是int*,乾乾脆脆。你在C++裡用到各種template各種type_traits的時候編譯器也確實是這麼處理的。Stroustrup老爺子也是建議寫int* p; int* q; 而不是int *p, *q;。