C語言中可以給指標變數賦值常數嗎

2021-06-25 14:44:04 字數 3750 閱讀 2683

1樓:會飛的小兔子

1、申請了空間(在常量區),存放了字串

2、在字串尾加上了'/0'

3、返回地址,這裡就是返回的地址賦值給了p

字串常量"hello"出現在一個表示式中時,"hello"表示式使用的值就是這些字元所儲存的地址(在常量區),而不是這些字元本身。所以,可以把字串賦值給指向字元的指標p,而不能把字串賦值給一個字元陣列。

chara[10]=“hello”;//這樣可以,這種情況是c語言初始化所支援的,如果寫成chara[10],然後a=“hello”這樣就錯誤了。同樣是a陣列,chara[10]=“hello”;這種是陣列的初始化,和a[0]=‘h’a[1]=‘e’,是一個道理。

換成chara[10],然後a=“hello”就不行了“hello”賦值的值是一個地址,而a雖然也有地址,但是這與指標是不一樣的,指標的值是地址,而陣列的值雖然也是地址,但是卻是一個常量,所以不能給常量賦值。

擴充套件資料

c語言中給指標變數賦值常數注意事項

在使用指標的時候,指標可以自增,而陣列不能自增,編譯器給陣列分配了空間,陣列a的地址就是一個常量了,讓常量自增這肯定是不行的。 在指標自增的時候,編譯器會自動識別型別,比如指標是指向int型的,想獲取下一個的地址時,指標直接p++就行了。

特別需要注意的是,在void指標使用的時候,不能使用指標運算,應為void型編譯器不能識別型別的長度(即指標所指物件的體積),p++這樣就是不合法的,即不能進行數**算,也不能使用*取值操作,想使用必須轉換為其它的型別。

2樓:a羅網天下

如:char *p,a='5';

p=&a;

p="abcd";

解析:p申請了空間(在常量區),存放了字串,所以最後可以返回地址。

以字串形式出現的,編譯器都會為該字串自動新增一個0作為結束符,如在**中寫

"abcd",那麼編譯器幫你儲存的是"abcd\0"。

1、定義指標變數的一般形式如下:

型別名*指標變數名1,*指標變數名2,... *指標變數名n ;

2、空指標

空指標是一個特殊的指標,它的值是0,c語言中用符號常量null(在stdio.h中定義)表示這個空值,並保證這個值不會是任何變數的地址。空指標對任何指標型別賦值都是合法的。

一個指標變數具有空指標值表示當前它沒有指向任何有意義的東西。

3、void指標

(void *)型別的指標叫通用指標,可以指向任何的變數,c語言允許直接把任何變數的地址作為指標賦給通用指標。

但是需要注意void*不能指向由const修飾的變數,例如第三句是非法的,只有將ptv宣告為const void * ptv;,上述第三句ptv = &test才是合法的。

當需要使用通用指標所指的資料參加運算時,需要寫出型別強制轉換。如通用指標ptv 所指空間的資料是整型資料,p是整型指標,用此式轉換:p=(int *)ptv;

3樓:匿名使用者

賦值當然可以啊,不能用地址引用

舉例://int

int * p = new int;

*p = c_int_1; //這個是可以的,賦值p= c_int_1; //這個不可以,地址複製了//字串

char * p;

p = "abc"; //字串這樣就可以,因為這個常量編譯器自動賦予了空間

4樓:今天沒有睡

不可以 因為這是不可預見的 如果指到了你記憶體中的重要訊息,電腦可能會出問題啊,所以千萬不要賦常數給指標變數

5樓:匿名使用者

準確地說,只能賦值0,其他的都不合法

6樓:匿名使用者

不能,變數怎麼能賦值呢,變數時變化的不是一定值

7樓:匿名使用者

只有字元指標可以,直接等於字串常量

8樓:匿名使用者

不可以 指標變數只能指向地址

9樓:情漫都市

一般不允許。很可能系統報錯

10樓:匿名使用者

指標時用來存放地址的!地址就是個常數啊!所以這樣是能編譯通過的!

但是,這樣執行會出錯(段錯誤)的!因為指標本來是存放地址的,而你卻存放了一個常數(即一個不合法的地址),這樣就會使指標指向不確定的記憶體單元(非法訪問),從而出現錯誤!

c語言中對變數賦值0x是什麼意思?

11樓:育知同創教育

c語言中對變數賦值0x是以十六進位制數作為變數的值進行運算的。一般用來表示記憶體地址內的。

舉例說明:容

定義x:int x = 0x23 ;

這句話的意思跟定義成int x=35一樣的。編譯器在接收到0x23時就把它當做十六進位制數來處理。

12樓:匿名使用者

表示0x後面的值為十六進位制

c語言中,為什麼字串可以賦值給字元指標變數

13樓:匿名使用者

在c語言中並沒有bai

字串這個型別

du。所說的字zhi符串就是字元dao陣列。也就是char型別版的陣列。

與普通陣列不同的,權字串必須以'\0'作為結束符。

而在c語言中,型別為t的一維陣列,其首地址等效於該型別的一維指標,即t*型。

於是字串,也就是字元陣列,首地址就可以當做char *型使用了。

事實上,在庫函式以及大多數使用到字串作為引數的函式中,其引數都是char *型的。

14樓:路圖元

p="abcd"; //這句話的意思是把字串的首地址賦給p!

15樓:匿名使用者

單引號和雙引號,賦值的時候這個應該有講究吧!具體忘了,幾年沒去看了。

16樓:土杜土杜

p = "abcd"; 編譯器會將字串"abcd"的地址放到指標變數p中。p存放的是它的地址,不是值。

17樓:棄嬰

字串常量賦值給指標變數應該就是把它的首地址賦給指標變數吧 。

18樓:五轉故劍情深

1. 'a'是字元

常量,bai"a"是字元字面量,一個du加zhi單引號一個加雙引號,是兩個不dao同的東西不要版搞混了

2.1 字元常量'a'使用整數(字符集

權的數值碼)表示,最常用的字符集是ascii碼,在ascii碼中,字元'a'的值為97,這也是為什麼字元可以作加減法運算和比較

2.2 字串字面量"a",在c語言中作為陣列來處理,既然如此,編譯器就會把它看作是char *型別的指標。題幹中p = "abcd"其實是將"abcd"首個字母的地址賦值給了字元指標變數p,或者說p指向了字串字面量"abcd"的第一個字元

2.2.1 c語言編譯器處理長度為n的字串字面量時,會為其分配長度為n+1的記憶體空間,第n+1個位置存放額外追加的空字元(字串結束的標誌)

19樓:

要理解 你要知道 字串copy 幹什麼了 雙引號 做了3件事

1.申請了空間,存放了字串

2. 在字串尾加上了'/0'

3.返回地址

你這裡就是 返回的地址 賦值給了 p 希望採納~~~~~~~~~~~~~~~~

在c語言中怎樣隨機給變數賦值

在c語言 bai中,獲取隨機數的du函式為rand 1 宣告 zhi daoint rand void 2 標頭檔案 stdlib.h 3 功能 獲取一內個隨機數容。4 示例 int a rand 獲取一個隨機數並賦值給a int b rand 100 獲取一個0 99的隨機數,並賦值給b。c語言c...

C語言中如給int型的變數賦值inta4和int

你要顯示成01麼。這不太可能,貌似c語言中沒有用0在前面站位的格式用法。倒是可以用空格佔位,printf 5d a 當a的值小於5位的時候,會有空格在前面站位。超過5為照常顯示。這兩copy種方法的結果是沒有區別的bai 但執行過程有差別,但後者比 du前者耗zhi時,所以推薦前者。至於是dao不是...

在C語言賦值語句中,給多個變數賦值,用逗號隔開,豈不是相當於逗號表示式

不能那樣抄理解。逗號表示式 是已經襲宣告bai過的變數合法組成的du 多個有效運算zhi表示式用逗號隔開,dao而int a 1,b 2 只能有一種解釋,那就是宣告和初始化變數時可以把多個相同型別的變數用逗號隔開寫在同一個型別符後面,最後用分號結束。對上面的宣告,如果再宣告一個int c 那麼,c ...