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 型 陣列 ...