c語言語法問題,宣告以及星號的作用

2021-06-10 13:12:56 字數 2907 閱讀 3509

1樓:吉祥二進位制

宣告一個變數或者函式只是將變數名或者函式名識別符號的有關資訊告訴編譯器,使編譯器“認識”該識別符號,而並一定分配記憶體。

在c語言中星號(*)一般有兩種意義,一種是和指標相關,用於宣告或者作為指標的間接運算子,一種是算術運算子,表示乘法。

int main()

2樓:

我理解的 * 在宣告中用來宣告其後跟的變數是一個指標變數,指標變數的值是一個地址

指標變數可能指向一個基本資料型別,也可能是struct,也可能是函式等

比如int* p; //p 指向一個整數的指標變數

int (*f_p)(char) //f_p 函式指標,函式形式是 返回值:int 形參:char

*後的空格可有可無 int* p; 和 int *p是一樣的

我查了下,好像是這樣

_ansi_args_是個巨集的定義

#define _ansi_args_(x) x

所以其實是

int (*glib_init) (glib_interp * interp);

那麼這句宣告意思是

宣告瞭一個函式指標變數,名字叫 glib_init

它指向的函式形式 返回值:int型別 形參:glib_interp型別 形參名字interp

估計glib_interp型別在前邊用typedef定義過

3樓:

_ansi_args_應該是一個巨集,它應該是指明函式傳參方式,請忽視它。

int func ((glib_interp * interp));能看懂嗎?那麼把func改為(*glib_init),那麼就是宣告一個函式指標,它指向的函式和func是同型別的。

星號、括號、識別符號、型別識別符號等都是語法符號,兩個語法符號之間可以任意加空格、tab、回車。

4樓:匿名使用者

這個語句宣告glib_init是個函式指標,這個函式返回int型別,帶個引數glib_interp * interp

至於_ansi_args_應該是個巨集之類的東西,不屬於標準c++的,是你的**庫裡的東西,從字面上看是對引數做的修飾處理,總之這整個語句是函式指標的宣告

空格可以忽略,加多少空格都沒關係

5樓:匿名使用者

glib_init是函式指標,返回int型別的函式指標,函式的傳入引數是glib_interp型別的指標,*前後的空格請無視它吧,沒什麼意義。_ansi_args_是巨集定義 ,好像是表示函式裡面所有的引數都是ascii碼,呵呵,我也不是很清楚。

6樓:茅坑玩蛆

這個看個人習慣,隨便有沒有空格,比如 int a=b;也可以寫成int a = b;

c語言中的星號“*”

7樓:萬能導師

這意味著我要定義一個指標,*未定義時,獲取以下地址的內容,輸入方法。

1.開啟visualc++6.0-file-新建的copy-file-c++原始檔,如下圖所示:

2.輸入預處理命令和主函式,如下圖所示:

3.定義可變度量並確定行數,如下圖所示:

4.確定空格數,如下圖所示:

5.確定每行星號的數量,並將它們包裝起來,如下圖所示:

6.執行如下,以輸出所需的星號:

8樓:888愚公

#define adc_a (*( structadc64_tag *) (0x0000000x3048)

樓主,是這樣子的,首先將 0x000000 加上0x3048,結果用 ( struct

adc64_tag *) 強制轉化成一個指向struct adc_64結構的指標,如果不強制轉化就把這個值當做指標,或者說地址,來訪問的話,編譯器是會報錯的,然後第一個的*號表示訪問這個地址!完畢。

9樓:徐徐隨風倒

樓上回答是正確的,舉個例子:

char * test = null;

我們給test分配堆空間

test = (char *) malloc(5);

這裡的char* 就是把分配的5個大小的空間引用為 char * 型別的

如果我們已經給test指向的空間賦值 比如賦值為“123”

這時我們通過 *test 訪問地址空間儲存的內容

10樓:伊·梵

*的用法

1.指標 ( struct adc64_tag *) (0x000000 + 0x3048)強制型別轉換

2.取指標的值中的 *p 就是取指標p指向的值

3.乘法運算子 3*4

4.字元'*' "3*4"

5.註釋 /* 這裡是註釋 */

11樓:匿名使用者

從第二個星號看起,這個星號表示把地址(0x000000+0x3048)引用為一個結構體指標,

然後到第一個星號, 這個星號表示取指標值

c語言程式裡指標中的星號到底什麼意思?

12樓:豪哥侃球

c語言中* 在定義的時候,只是說明我要定義一個指標了。

* 在非定義的時候,表示取後面那個地址裡面的內容。

c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。

c語言函式宣告的問題,C語言函式宣告的問題

我也來 說幾句。標準編譯器 對函式的呼叫 都要 先申明 才能 呼叫 生產的時候就這樣設定的 我推薦試用 大點的 vs2005,vc2000.小點的 dev cpp turboc 3.0 2.0 不支援滑鼠有點 麻煩 這裡 就涉及 申明和定義之間的區別。申明 不開闢記憶體,僅僅告訴編譯器,申明的部分存...

C語言陣列問題,c語言陣列宣告問題

for i 1 i 10 i break 要求按已排好的順序規律將它插入到陣列中.這段改為 for i 1 i 10 i a i 1 m break 你確定是從大到小排列嗎?我怎麼感覺你的程式是從小到大排列的啊。include void main 從鍵盤接收10個數。for j 1 j 10 j f...

在C語言中什麼是語義錯誤c語言語法錯誤和語義錯誤有什麼區別,麻煩舉個例子

一般的程式錯誤,粗略一點分的話,可以大致分為語法錯誤和語義錯誤。語法錯誤可以看作是編碼出現了違反c語言規則的錯誤,一般編譯或者連結時,都會報錯的。而語義錯誤,也可以叫做邏輯錯誤,也就是說你的 完全符合c語言的規範,不會出現編譯 連結的錯誤,但是,在邏輯上有錯誤。舉個簡單的例子,加入編一個 來統計in...