C語言有指標字串,為什麼沒有指標數字?

時間 2021-05-30 10:21:29

1樓:虛實道長

我個人覺得這個跟計算機的架構,以及數字或者字元的編碼有關。計算機如果暫存器是32位的,當然可以直接支援32位的數字(整數或者浮點數)。但是字元,本質上也是「數字的形式「儲存,那麼顯然的問題就是」如何把abcd26個英文本元和常用字元用什麼數字儲存?

「。單個字元可以轉化為32位數字,而字串不能夠。所以問題並不是」c語言為何不設定字串變數「,而是字元的編碼跟暫存器的位長有關。

2樓:kuzhushu

哈哈,題主以為

char p="abc";

後p就是"abc"了?不是的,是"abc"這個串的位址,記住,是位址。

所以,int p=123後p值是123,是指0x0123位址。

你說int *p=123會錯,其實早先的C是不會錯的。

3樓:

(int) * p = (int *) malloc (sizeof (int));

* p = 123;

是這樣寫吧?忘了

4樓:

字串本身就是位址!還是靜態的!一開始就和程式載入在記憶體裡面的!

記住了這三句話再來看看題主所提出的問題

char*p="123"; p指向字串123的首位址(手機碼字簡寫請見諒)沒什麼不對啊要硬說有錯的話加個const吧順帶一提如果改變p的指向在c中是未定義的為了安全請禁止這樣做

如果要改變字串的內容請用陣列

char a="123"

為什麼呢? 因為指標指向的是靜態記憶體中字串的首位址陣列把字串複製乙份過來所以。。。。

再說說題主的int指標的那個問題如果你想指向的是一百二十三請用乙個變數如果你想指向的是1 2 3請用陣列或陣列字面量

指標指向的是位址!!!

(怕被噴匿了)

5樓:李成哲

可以這樣理解。

字串 「123」,這樣乙個語句它返回的是乙個指標,這個指標代表儲存這個字串的首位址,所以賦值沒問題。

數字 123,這樣乙個語句它返回的是數字 123 本身,這不是乙個指標,把數字賦值給指標,所以編譯器報型別錯誤。

如果你進行強制型別轉換,賦值可以成功,那此時 int 指標,指向的是記憶體位址為 123 的資料,int 代表將這個資料認為是乙個 int 值。

6樓:

char *p 不是所謂的字串指標,只是字元(char)指標,指向 'p';

C 裡面根本沒有字串這個概念,"abc" 是 char 陣列;

陣列可以隱式退化成指向首元素的指標,int 不行。

7樓:

#include "stdio.h"

int main() ;

int *p = array;

for (int i = 0; i < 4; i++)printf("%d,", *(p + i));

for (int i = 0; i < 4; i++)printf("%d,", p[i]);

return 0;

字串就是字元陣列,只不過它給你提供了一種簡單的寫法,通過雙引號直接賦值,

題主你想說的那就是陣列,需要回歸原始寫法,通過大括號來。

8樓:瞎貓

題主概念理解的有誤。

本質上指標用於指向記憶體位置,它的值是記憶體位址。沒有指標字串和指標數字這一說法。應該是指向字串所在記憶體的指標,以及指向(整形)數字所在記憶體的指標。

char* p ="abc"是宣告並初始化了乙個指標,它的值是乙個記憶體位址,該位址是字串abc的首位址。c語言中字串與字元陣列是一樣的,即等效於char str =;char* p=str;

int* p=123是宣告並初始化了乙個指標,它的值是乙個記憶體位址,並等於123。也就是顯示指定指標指向記憶體位址123。這時你需要告訴編譯器123是int*,即int* p=(int*)123

如果你想指向值123所在的記憶體,那麼應該是:

int v = 123;

int* p = &v;

C語言字串如何賦值及輸出?

那個人 你這不是字串賦值,而是字串指標賦值。你定義的是乙個字串指標,指向的是字串常量的起始位址。字串定義 char buf LEN 賦值 strcpy buf,string 或sprintf buf,s string 先不用嘟嘟嘟,p abc 其他不變 首先執行時記憶體裡面會有乙個位置儲存 abc ...

c語言處理字串, 但不想編譯器給每個,字串後面都加「 0」符號,要自己做的話,要用什麼方式呢?

子謙 首先,C語言中,字串並不是自動加上 0 字元的。說明下字元陣列和字串 字元陣列指的是有若干char型的元素組成的陣列,但是由於常用char型的陣列表達一些含義完整的自然語言,因此常把char型陣列看成乙個整體,為了方便對於這樣乙個整體的操作,在字元陣列初始化的時候,如果使用char str h...

為什麼 C 語言中可以將字串字面量寫成 hello world 這種形式?

很簡單,這樣你就能在文字編輯器中,換行書寫乙個很長的字串了嘛。否則,你的乙個很長的字串,寫出來會怎麼樣,你需要左右滾動你的水平滾動條,不方便。看起來也比較醜。 Narsil 這個問題有點.我認為語法問題沒有啥糾結的,就是這樣規定的,遵照即可,你可以自己查查 c 的標準或者 the c program...