c語言中用指標賦值字串為什麼不加如下

2021-03-04 09:30:10 字數 6041 閱讀 8824

1樓:匿名使用者

a="cool";

這是地址來賦值,將一個常量字串

自的首地址賦值給a這個指標。

*a="cool";

這是字元賦值,不是字串!雖然a叫字串指標,但char* a這樣的定義,*a必然是一個字元,而不是多個。因此後面的常量會被忽略為一個字元,進行數值賦值(也可以理解為拷貝賦值,區別於地址賦值)。

在a沒有分配地址的情況下,直接 *a=「***」 會造成記憶體報錯,而a=則不會。

為什麼c語言用指標輸出字串不用加*號

2樓:聽不清啊

printf在輸出字串時,需要的是指向字串的門地址。而str就是它所需要的這樣一個首地址。

3樓:嵩山少俠來了

為什麼c語言用指標輸出字串不用加*號?因為char*str定義了一個char*字元指標str,而str指向了ilovechina中的第一個字元i。

在cout流中有一個複製迴圈,它是一個具有數百個輸出str點的字串,在這個字串中,str被賦值給臨時指標,以便一個接一個地輸出。

然後*str是一個字元,也就是i*是一個derecration,也就是str指向的那個字元,所以*str就是i這個不能被賦值或移位所以它不能被列印出來。

擴充套件資料:

關於字串指標

1.字元陣列中儲存一個度字串

char字串[]="linuxc";

printf("%s\n",字串);

字串是一個字元陣列的名稱,它也是應答字元陣列的第一個地址。

2.使用字串指標指向一個字串

如果你不想定義一個字元陣列,你可以用一個指標指向一個字串,稱為「字串指標」,例如:

char*p="linuxc";

printf(「%s\n」,p);

「linuxc」是一個字串常量。字串常量的c語言:在記憶體中開啟一個字元陣列來儲存字串常量,並將開啟的字元陣列的第一個地址儲存到p。

請問在c語言中如何通過輸入字串為字元指標陣列賦值?

4樓:斯坦恩貝格(北京)電子****

首先確定是字復符指標數制組還是字元陣列指標,前者是一個陣列,陣列每個元素都是一個字元指標,後者是一個指向字元陣列的指標。

若是指向字元陣列的指標,則很簡單,使用scanf("%s", str);函式獲取輸入的字串,然後使用字串拷貝函式strcpy(stc, dest);將獲取的字串拷貝到指定地址的字元指標陣列中,拷貝過程中注意檢查訪問陣列是否越界,若越界,則需要在字元陣列的最後一個元素賦值為結束符'\0'。

若是賦值 字元指標陣列,那麼就是對陣列中的某一個元素指向的字元陣列進行拷貝賦值,其過程與前者相同。

5樓:情義

直接在一個字串裡面按位賦值就可以了

因為你原字串肯定是大於等於新字串的,所以

專定一個變屬量檢查原字串的位置,定另一個變數檢查新字串的位置。那麼第一個變數肯定是大於等於第二個變數的。這樣可以把值從第一個變數的地方賦值到第二個變數的位置即可。

6樓:匿名使用者

有scanf("%s");

char *p[5];

char buff[5][100];

for(int i=0;i<5;i++)

c語言中,為什麼不能對字元指標變數指向的字串再賦值?

7樓:大野瘦子

因為抄c語言中,凡是以""括住的形式直接出襲現,而且你又沒有為其分配記憶體空間的字串都是常量字串,是不能修改其值的。

這樣:char a[6]="hello";

a[2]='c';

就可以了。

這裡你為hello分配了一個長度為6的字元陣列空間來存放。

8樓:種令芮德曜

char*

a=為什麼不能修改,這個要涉及程序佔用的記憶體分段,大概分為**區,只讀

區,全域性區專,堆屬區,棧區。"hello"作為一個字串字面值,是被放在只讀區,只讀顧名思義就是不能修改的。char*

a="hello",相當於把hello的地址賦給了a,故而不能對a指向的內容進行修改。char

a="hello",這樣賦值的就是一個字元陣列。字元陣列a是在棧區裡申請的一個空間給a,然後把只讀區的"hello"進行了一次複製再賦值給a,這樣a的指向是能修改的。

9樓:匿名使用者

c primer plus 一書中寫到:「內容」為字串面量,其被視為常量,故無法再進行修改。只能對其指標的值(改變位置)進行修改,不能改變其內容。

10樓:

這不是絕對的:

bai當指du

針指向的字串是zhi常字串時當然不能再賦dao值,因為目標是「常量專」,而當指標

屬指向的字串不是常字串時就可以再賦值,比如用動態申請記憶體方法建立的字串。具體說就是用char *p="abcqer12345";這種方法定義字串是不能通過指標改變內容的,原因是這個定義確定了abcqer12345是字串常量——因為char *p="abcqer12345";被編譯器解釋為「建立一個字串常量abcqer12345,並把它的首地址(就是a的地址)賦給char *型指標p」——既然是「常量」,自然就不能更改。

11樓:匿名使用者

c語言bai中,凡是以""括住的形式直du接出現,而且你zhi又沒有為其分配內dao

存空間的字

符串專都是常量字串,是屬不能修改其值的。

char a[6]="hello";

a[2]='c';

就可以了。這裡你為hello分配了一個長度為6的字元陣列空間來存放。

12樓:匿名使用者

char *a="hello";

''hello''是常量,所以a指向的是常量區,不能對於常量區的元素進行賦值

13樓:匿名使用者

char *a="hello";這個形式的定義是屬於字串常量,不可以修改的.

14樓:匿名使用者

不能修改!

char *p="hello";

相當於 const char *p="hello"

以這種方法初始化的字串是常量字串,而系統預設對常量賦初值後,其值無法被修改,否則會報錯,所以不能修改。

c語言指標的賦值問題

15樓:大野瘦子

指標在用要注意初始化,例如:

int *p;

p為指標,地址是未知的,如果直接賦值

*p=a;這樣編譯可以通過,但是會產生警告,p的地址是隨機分配的,這樣對未知的地址賦值很危險,可能會覆蓋掉某些重要資料,所以避免這種危險,在定義指標時注意初始化,也就是賦值。

可以int *p=&a;

或者int *p;

p=&a;

然後再對p進行操作

有錯。注意大小寫,還有

int a=9;

int *p;

p=&a;//這個是指標指向a

*p=8;

這樣就對了。

指標的賦值

int *p;

int a;

int b[1];

p = &a;

p = b;

指標的賦值,「=」的左運算元能夠是*p,也能夠是p。

當「=」的左運算元是*p時,改變的是p所指向的地址存放的資料;

當「=」的左運算元是p時,改變的是p所指向的地址。

陣列的變數名b表示該陣列的首地址,因此p=b;也是正確的

同型別的指標賦值:

int val1 = 18,val2 = 19;

int *p1,*p2;

p1 = &val1;

p2 = &val2;

p1 = p2; //注意啦,p1指向了val2,而沒有指向val1

備註:字串與指標的初始化和賦值

初始化:

char *cp = "abcdefg"; //這個初始化過程,是將指標cp指向字串的首地址,而並非傳遞字串的值。由於,在c語言裡面,沒有總體處理一個字串的機制

賦值:cp = "abcdefg";

*cp=」abcdefg」 ;//錯誤!字串常量傳遞的是它的首地址,不能夠通過*cp改動該字串的值,由於該字串為常量,而它僅僅是簡單的將指標指向該字串常量。

16樓:林聲飄揚

有錯注意:用指標變數前,必須對指標變數賦值如:int i, *p1;

p1=&i;

再如:int a, b;

int *p1, *p2;

*p1=10; *p2=100;

但指標變數未賦值,即指標指向未知地址,這樣是錯誤的因此:絕對不能對未賦值的指標變數作「指向」運算。

int a=9,b;

int *p=&b;//必須加上這一句

*p=a;

*p=8;

這樣就不會產生錯誤

17樓:匿名使用者

注意大小寫!還有

int a=9;

int *p;

p=&a;//這個是指標指向a

*p=8;

這樣就對了。

18樓:七先生是遊戲鬼才

這個還是比較複雜的,你可以學習一下

19樓:匿名使用者

p=&a//把a的地址給指標p

20樓:匿名使用者

語法上沒錯,但可能出現警告,破壞程式其他資料

21樓:渾濃強浩然

p就是一個指標,他指向一個地址,而&p就是p剛才所指向的具體地址,*p是p指向地址裡面的東西。也就是值。*p=&a的意思是把a的地址給了*p,這樣的話p就指向

(指向a的地址)的地址。對指標賦值必須是int*p=null;或者int

*p;p=null。

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

22樓:匿名使用者

在c語言中並沒有bai

字串這個型別

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

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

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

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

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

23樓:路圖元

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

24樓:匿名使用者

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

25樓:土杜土杜

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

26樓:棄嬰

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

27樓:五轉故劍情深

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個位置存放額外追加的空字元(字串結束的標誌)

C語言字串問題,C語言中,字串是什麼?

這迴圈需要執行4次,對應的字元就是0001,也就是說這個sc需要5個空間,加一個 0 for i 0 i 2.你這個程式每次執行的結果可能是不確定的,因為你沒有初始化sc陣列,printf以字串的形式輸出,他是遇到 0 字元才結束的,所以為了保證程式的結果是一致的,建議初始化陣列。sc 5 這樣就可...

關於c語言中字串指標變數的問題

樓主你好 字元指標ps賦值後是字串 this is a book 的首地址 也就是說此時ps指向第一個字元 t ps就是 t n 10 ps ps n 就是使指標ps指向字串 this is a book 的第11個字元 也就是 b 那麼printf s n ps 就是輸出以ps為首的 以 0 結束...

關於C或者 C語言中字串和指標問題的疑問求高手解答

s是指向字串的指標,s是printf格式化輸出字串,而 c是printf格式化輸出單個字元。s相當於s 0 所以輸出單個字元。輸出地址用 p。輸出格式定義,定義了輸出什麼型別的變數,輸出時做怎樣的轉換。printf s s 格式 s 定義了輸出 一個字串,輸出變數 提供 輸出的 char 型 陣列 ...