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

時間 2021-08-31 10:26:47

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語言 讀取不同資料型別的資料列

c語言 023 輸出顯示不同型別資料 上。c語言中不同資料型別的相互轉化怎麼做?在c語言中,不同資料型別在進行運算時首先要轉換成同一型別,一種是自動轉換,二是強制轉換,如 int a 將a強制轉換為int型。轉換原則 箭頭是轉換方向。char,short int unsigned long,floa...

c語言的基本的資料型別,C語言 四種基本資料型別

c語言中只有 邏輯運算子 沒有邏輯型你估計是認為 邏輯型就是 布林型別吧 屬於邏輯型c語言中沒有 布林型別 布林型別 是c 中的 邏輯性指的是ture false,在c裡並沒有,c裡0代表false,其他的一切都代表true 沒有邏輯型別,但有邏輯運算 在昭顯廟寫歌的北冥雪 c語言沒有邏輯型,邏輯型...

C語言中賦值時不同資料型別的轉換

你說的int應該是16位,2位元組。char型別只佔用了一個位元組,8位。所以轉化的時候只要取int型16位的低8位就夠了。這個和變數的記憶體儲存方式有關係,你要弄懂變數怎麼在記憶體中放置和儲存的就很容易理解了。 是int 轉為char 才取 int 的低8位 int 有 32位 轉成char型別時...