c語言裡面放在資料型別後面的星號有什麼用

2021-08-31 10:27:14 字數 3774 閱讀 6195

1樓:

在變數前面表示這是宣告一個指標變數

在函式前面表示這個函式返回一個指標型別

malloc是動態分配記憶體c++裡用new用法char *string;

string = (char *)malloc( _max_path );

因為malloc返回的是一個void* 所以這裡得強轉為你自己需要的型別

後面那個是指明你想要申請的大小(位元組為單位)

2樓:

char* 宣告下面的變數是指標,指向char型量。

void* 宣告下面的變數是指標,指向void 型。

int* 宣告下面的變數是指標,指向int型量。

malloc的用法

#define array_size 100

char *s;

int *a;

s = (char *) malloc( array_size * sizeof(char));

if (!s) ;

a = (int *) malloc( array_size * sizeof(int));

if (!a) ;

for (i=0;i

printf("please input a line strings\n");

gets(s);

printf("the line is: %s \n",s);

c語言陣列中,這裡怎麼會有兩個星號?什麼意思?

3樓:續弘揚剛濰

括號裡是強制轉換成指標形式,即先將地址0x90015554轉化成指向int資料的地址,回然後括號外的第二個*表示取得地址0x90015554的值,整個表答達式的意思就是將0x00aa這個值賦給0x90015554這個地址

4樓:匿名使用者

p是二維陣列的指標,也就是指向只針的指標,**表示連續兩次取值。因為p是指向指標的指標,所以第一次取值,取出來的是個指標,第二次取值取出來的就是值了

c語言中為什麼要加星號!

5樓:風若遠去何人留

在c語言中使用*號有兩種情況。

1 做乘法運算子使用。

在計算機中一般不使用數學的乘號×,而是用更容易打出的*替代。

如果*出現在運算中,且左右都有表示式,那麼*就是當做乘號來使用的。

比如#include

int main()

這個程式就是簡單的計算3*4的輸出,會輸出12。

2 定義指標時做識別符號。

在c語言中有指標的概念,在定義某個型別的指標時,會採用type *name;的形式。 具體說明在第三部分中一併敘述。

3做取值運算子。

對某個指標變數做*操作,表示取該指標指向地址中的值。

在這種情況下*位於所要取值的指標變數前。如*p。

比如#include

int main()

6樓:

char *s,其中s表示指標,指標可以接受字元和字串的賦值例如:char *s;

s="abc";

其中s="abc"表示把abc所在的地址賦給了s,而*s也就是指向了abc所在的地址,也有了值「abc」。

7樓:匿名使用者

開始的星號是定義指標沒有問題相當於一個字元陣列a後面的其實是將指標中的內容取出再賦值

*(s+i)=*(s+n-i)相當於

a[i]=a[n-i]

8樓:匿名使用者

星號可以聲名指標型別變數,也可取的指標變數的值,提高了程式的效率

9樓:ma饅頭

加星號改變值,不加改變指標指向,不一樣。

10樓:

*是指標運算子(不是取地址運算子!)

有沒有加*是不一樣的``

char *s,加*表示變數s是一個指向字元型的指標變數,不加*(char s)表示變數s是一個字元型變數

*(s+i)=*(s+n-i)表示它們指向的儲存單元內容相等,即s+i儲存內容和s+n-i儲存內容相等。而(s+i)=(s+n-i)則表示它們表示式的值是相等的,即s+i與s+n-i值相等。

不能簡單的把加*看成就是指標,因為它同時還是一個運算子,雖然s是一個指標,但加*時它表示的是字元值,不加*時可以看成是地址值,比如:假設s值為0x25,*s值為0x41,則執行s=s+1後*s不一定等於0x41,假設0x26儲存內容是0x42即字母b,則s=0x26,*s='b';而執行*s=*(s+1)後則s=0x25,*s='b'.

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

11樓:吉祥二進位制

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

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

int main()

12樓:

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

指標變數可能指向一個基本資料型別,也可能是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定義過

13樓:

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

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

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

14樓:匿名使用者

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

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

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

15樓:匿名使用者

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

16樓:茅坑玩蛆

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

C語言不同資料型別怎麼轉換成同一資料型別的

大概有三種bai 情況 1.表示式du中有幾種可計算zhi 型別時,自動向dao 高 看齊,即自動把位數回少的型別通答過填加無效0而達到表示式中位數最多的型別,計算結果也是 高 型別。這種轉換不需程式設計師干預,也不損失資料。2.通過賦值自動轉換,即自動將右邊表示式計算結果的型別轉換為表示式左邊變數...

c語言裡面能輸入中文內容的資料型別是什么

好像不能這樣輸出得用wsprintf把字串轉換下 include int main c語言中,如果要輸入一箇中文字元,應該定義一個什麼型別的變數呢?很急的,謝謝各位大神 include stdio.h void main char s 3 scanf s s printf n 1 2 3 10 s ...

C語言中基本資料型別包括哪些

c 語言的基本資料型別有如下四種 整型,說明符為int 字元型,說明符為char 浮點型 又稱實型 說明符為float 單精度 double 雙精度 空值型,說明符為void,用於函式和指標。為了滿足各種情況的需要,除了void型外,上述的三種型別前面還可以加上修飾符改變原來的含義。signed 表...