C語言指標直接字串變數前加是什麼怎麼回事?沒有提前定義啊

2021-03-24 02:16:30 字數 4482 閱讀 5266

1樓:因為_遺忘

你是說fun函式的那個引數char *a 嗎?

用在這裡表示fun函式呼叫時需要的引數是一個char型別的指標,也就是地址,這裡可以理解為這是一個定義,定義一個char型別的區域性指標變數,如main函式裡面呼叫時,fun(s)將字串的初始地址傳入fun函式。

2樓:隨便玩玩

void fun(char * a)

子函式裡面不是定義了嗎?為什麼說沒有定義?不理解你的意思a就是一個*a這個指標指向的地址呀

fun(s); //這是把字元陣列s[80]的地址傳給子函式並通過子函式進行運算,這裡的子函式什麼也沒有幹,就是一個空函式

這個程式輸入什麼字串,就輸入什麼字串。和那個子函式沒有關係,只是讓你明白,函式的引數傳遞可以傳遞一個地址而已。

以上為個人見解,如有不對之處,歡迎大神指正!

3樓:真的無奈啊

加了*就表示這是指標(就是這個變數的儲存地址

,這是個char(字元)指標,就是隻能儲存字元類變數的地址)!這道題是傳址呼叫, fun(s);就是把s[80]中的字串的首地址傳給形參a(這裡a是字元型指標),之所以這樣寫,是為了讓實參隨著形參變而變!c語言:

傳值呼叫實參不能隨著形參改變而改變,只有傳址(地址)呼叫才能讓實參隨著形參改變而變!在c++裡面和這差不多,但是c++裡面引用也能讓實參不能隨著形參改變而改變!

4樓:匿名使用者

是指「void fun(char * a)」這裡嗎?

這樣定義是很正常的,基本上子函式的形參都這樣定義

處理陣列類的函式形參用指標比較方便,陣列名即為陣列首地址,傳遞首地址,即傳遞整個陣列,因為陣列在記憶體中是連續儲存的。不會出現斷點

5樓:家高韻冼姝

ps指向"thisisa

book"的首地址,即第一個元素,但是指標有一個運算

c語言指標什麼時候要帶*什麼時候不帶*? 20

6樓:萬裡挑伊

int a;

定義:duint* p;

定義並賦值:int *point=&a;

賦值時zhi:

p=&a;

取值時:

int a=*p;

取值時:int b=*p;

指標dao其實跟普通變數的

回區別就在於它的記憶體裡裝的是答一個地址,而普通變數裡裝的是數值;

定義時加*,是為了讓編譯器認出它是一個指標,知道其記憶體裡裝的資料是地址。

而在使用時加*則是為了取出取出指標所指向的地址裡存的資料。

綜上,定義指標一定加* ,其它時候如果是取值則加*,否則不加。

有問題可以繼續**☺

7樓:

嚴格說來,指標什麼時候都不帶*。int *p,那個*是int的,不是p的。但為了在int下宣告不是指標的變數,規定在每個指標變數前加一個*,以便編譯器識別,這就使好多人誤以為*是指標變數的了。

8樓:幻月

定義指標格式是int*p;其中p是用來存放某個變數的地址的,如:int a,*p;p=&a;*p是表示指標p所指向的儲存單元中的

專值,如屬上面的a值,而p是a的地址(&a),當你需要呼叫a的值時,就用*p;呼叫a的地址時就用p.

9樓:匿名使用者

指標是c語言很重要的知識,建議仔細看看。

定義指標的時候是一定要加*的,這樣才會識別為指標。定義好了就不用加了。

當然如果指標指向函式a,用的時候也要加。

總之,分不同情況,看指標指向的是什麼了。

10樓:匿名使用者

帶*是指標的值,不是指標本身,不帶*才是指標本身。比如 int *p;p就是個指標變數,這時*p是沒有意義的,只有 p=new int;或把別的變數的地址賦給p,*p才有意義。

11樓:匿名使用者

二樓正解。不過指標指標的時候帶*,表示指標地址的時候,不帶

12樓:匿名使用者

宣告的時候必須帶* ;

使用的時候要取指標變數的值不帶*,此時取得的是一個地址;要取實際值加*,***

13樓:逍遙足球子

* 在於c語言當中對於指標來說,表明取出當前指標指向記憶體地址中的記憶體。

14樓:eva殤

帶*的情況

1.宣告的時候需要用*來表示宣告的物件是一個指標。如:int* p;

2.使用的指標的

專值的時屬

候。如:printf("p = %d",*p);

3.給指標賦值的時候。*p = 5;

不帶*的情況:

1.使用指標的時候。如:int a = 0; p = &a;(p是int*)

2.表示字串首地址的時候不用*。如:char* ch = "hello"; printf("%s",ch);

15樓:匿名使用者

宣告或者定義的時候帶*的話,說明它是一個指標型的變數,其它時候說明要給這個指標賦值!!

16樓:匿名使用者

對於指標的*最好和取地址&一起聯絡起來學

17樓:我姐是恐龍

同學這個不抄能硬背 要理解

帶*表示的那bai個記憶體

du地zhi址儲存的值

不帶*表示那個記憶體的地址

int *p,a; p是指標 a是整數daoint *p,*a; p是指標 a也是指標int *p=&a等價int *p; p=&a;

18樓:匿名使用者

int *ie;

int ir;

ie=&ir;//不帶星號代表地址吧

*ie=10;//帶星號代表指向地址的值

c語言中指標加不加*有什麼區別

19樓:丶自由丨落體

剛開始學習

baic,同樣有這du個疑問,在網上zhi查了一下,沒

有什麼讓人一目了dao然的解釋。

專用int *x作為屬

例子。既然int *x 只是定義了一個記憶體空間,儲存一個記憶體地址,那麼普通的int x應該也可以做到。

int num = 5;

int *x = #

int x1 = #

x 和 x1 同樣儲存的是 num 的記憶體地址,但是隻有用了*宣告的指標能夠通過 *x 來訪問 num .

printf("%p , %p", x ,x1)  // 這一行會輸出兩個一樣的記憶體地址。

printf("%d" , *x )  // 成立,不報錯,正常輸出 5。

printf("%d" , *x1 )  // 不成立,編譯器會報錯,『*』的運算元必須是指標。

第二個變數名使用x1的原因是,當你嘗試 printf 輸出的時候,指標 *x 會強行覆蓋普通的 x 。

20樓:匿名使用者

不加*取地址,加了*取地址裡的內容

21樓:匿名使用者

比如 int a=5; int *p =&a; p就是5的地址 *p就是p地址上的內容5

22樓:匿名使用者

因為在bai函式形參中 a是指標(du地址),所以zhi char *t定義的是dao

指向字元的指回針

你記住在初始化的答時候就是這麼定義的

初始化指標例子

int h = 5;

int * pt = &h;

在這種情況下,被初始化的是指標,而不是它指向的值。也就是說,上面的語句將pt(而不是*pt)的值設定為&h

23樓:鈕玉芬孛辰

基本來上沒有區別,c++僅僅只是在c語言

自的基礎上bai

增加了物件導向的概念,所du有它又被稱為zhi是「帶類的daoc」,因此,c++在指標操作上增加了指向物件的指標(引用);但究其本質而言,指標仍然是記憶體中的地址,這一點沒有改變.

24樓:hay暗夜

不加就不是指標就像是定義陣列的。這是一種語法規則

25樓:狼性我行我素

加*號代表的是訪問指標儲存地址上的資料!

不加*號就代表的給這個指標變數賦值只能是指標!

26樓:碧血玉葉花

加不加bai括號,是

陣列指標,還du是指標陣列zhi的區別

*p[2] 是一個指標dao陣列,內首先它容是一個陣列,陣列中存的是指標,存指標的陣列。

(*q)[2] 是陣列指標,加括號先與 *結合,它是一個指標,指向一個第一維包含2個元素的2維陣列,存陣列地址的指標。

q=s ; 把 陣列 s 的地址存入 qp[0]=s[0] 把s[0] 第0行的首地址存入 陣列p[0]中

27樓:匿名使用者

問題描述的不是很清楚

跪求c語言字串處理函式,跪求 c語言字串 7個處理函式

1.字串連線函式 strcat 原型 char strcat char str1,const char str2 2.字串查詢函式 strchr 原型 char strchr const char str1,const char str2 3.字串比較函式 strcmp 原型 int strcmp ...

c語言中怎麼樣定義字串變數c語言中怎麼樣定義一個字串變數

c語言沒有字串型別,所以沒辦法進行定義字串變數。但是可以用字元陣列來處理字串。這定義了一個字元陣列,名為a 例 char a hello 也可以用來定義一個指標變數 定義了一個指標變數,名為p 例 char p hello 接觸c語言幾天。查了一些資料是這樣理解的,有不對的地方一起學習啦。一維的情況...

數值變數跟字串變數有什麼區別,C語言中,數字字串和數值型資料有什麼區別

只是變數複名而已是制沒什麼區別的.在不同的程式語言裡,定義都是不同的.vb裡 dim str as interger 定義一個數字型的變數 dim str as string 定義一個字元 串的變數 又或者 dim str 未標識型別的變數,根據程式中的賦值來確定變數型別 c c c 裡都差不多 i...