關於c語言char的用法問題假如

2022-02-14 18:47:34 字數 5444 閱讀 9272

1樓:趙德柱

char *a是錯誤的,只能定義char *a[任意整數];

或者char *a[4或者其他整數或者不填]=「abc」;

或者char *a[3或者其他整數或者不填]=;

或者char *a[2或者其他整數或者不填]=;

或者char k,j,l,*a[3]=;

char (*)a也是錯誤的,只能定義為(char *)a[任意整數];

首先說下第一個,以char *a[4];為例, 這語句是定義一個指標型陣列,他的元素都是指標。指標是可以直接來指向一個字串的,用法是char *p="good。指標型陣列中每個元素都是指標,則每個元素都可以去定義一個字串或者是定義一個變數;所以如果有一個a[4][4]=; 現在就可以用char *p[4]=; 這樣的好處是節約了空間,一個陣列被定義下來後,記憶體就被分配了,如果這個陣列在後面的語句中不再使用了,那它就佔著空間,使得原始檔很大,如果使用指標陣列,就很容易解決這個問題了,因為只要讓指標陣列在指向其他的字串或者其他的一些變數 ,這樣原來的空間就被釋放了

(char *)a[4]的意思是將指標型陣列a中的元素a[4]強行轉化為char型別

希望能夠幫助到你,望採納!

2樓:ghoul荷蘭人

第一個 是指單個字元

第二個 是指指標陣列,相當於一個2維字元陣列

字元陣列中可以放的字元,數量受*p的的數字控制,由於這裡沒有數字就已初始賦值時,字元個數最大的個數計數

c語言中,char a[] = "abc"; char *p = "cdef";

3樓:

char a = "abc"; 中a是陣列抄名,編譯時為其分配

襲4個char單元,前3個單元用「abc"中的字元對應初始化,最後一個存放'\0';char *p = "cdef";在編譯時先生成"cdef"字串常量,存放在常量區,並將首地址(c的地址)賦給char *型指標變數p。從以上可見,a是陣列,所以其中的元素abc都可變,可以重寫;而p指向的是常量,不可更改。

4樓:

區別就在於,陣列名a和指標變數p雖然本質上都是地址,但是陣列名a它的地址是不變的

內,即它是一個常指標,容指向是固定不變的;但是指標p是個指標變數,它的指向是可以改變的,你可以將a的地址賦值給p,即p=a;那麼指標p就指向了陣列a的首元素地址了,但是陣列名a它在賦值語句中是不能做左值的,因為它是一個常指標,和一個常量沒什麼區別。

5樓:匿名使用者

a定義是一個字串

陣列,*p定義的是一個字串常量。陣列名a是一個常量,指標p是一個變專量,屬當用作指標時,都能使用a+1,p+1,但是p++正確,a++錯誤,

通過a能改變陣列裡的元素的內容,但是不能通過p來改變它指向的字串,因為常量是不能更改的。a[2]=d正確,p[2]=d錯誤

6樓:匿名使用者

sizeof(a)=4 sizeof(p)=4 這裡不一樣

c語言裡 char **p; char *a[2] = {"abc","def"}; *p和**p有什麼不同?

7樓:匿名使用者

*p表示指標,即有一個儲存單位p用於儲存一個資料(如字元)的地址。

**p表示指示指標的指標,即這個儲存單位p儲存了一個 指示另一個資料地址的指標 的地址。

8樓:匿名使用者

指標是什麼:我們可以理解為一個無符號雙字整型,即4個位元組的整數。大約能表示4096m個數,我計算機記憶體一般為2g,即2048m,所以4位元組數字基本可以標示出所有記憶體地址。

假設char *p='a'; 其中指標p的值為138. 意思是在記憶體位置138,有一個char字元a,即a儲存在第138個位元組中。此時指標p是4個位元組,也儲存在計算機的某個位置,假設為100,即在100到103這四個位元組中,儲存著指標p.

我們再定義一個指向指標的指標,比如char **s=p; 此時s的值就代表指標p的儲存位置,即100.

所以*s==100,*s==p; **s='a'; p==138; *p=='a';

一句話,指標就是地址值,簡單點,比如在大學校門口,有個指示牌,通過個這個指示牌,我們可以知道圖書館的位置,而在圖書館,也有個指示牌,通過這個指示牌,我們可以知道教學樓的位置。此時校門口的指示牌就相當於指向指標的指標**p,而圖書館的指示排相當於指標*p,教學樓就是最終目的地。

對兩個陣列a和b進行如下初始化: char a[] = 「abcdef」; char b[] = {『a』,『b』,『c』,『d』,『e』,『f

9樓:蒼穹夜光

要不這樣理解吧

首先a作為字串長度為6;

作為字元陣列有7個元素,包含\0,a陣列的長度為7;

b是字元陣列有6個元素,不是字串,b陣列的長度為6;選d

10樓:匿名使用者

"abcdef」;是字串,字串預設是有字串結束符的。

所以選d

11樓:匿名使用者

樓主首先要明白的是什麼是長度。陣列元素的個數稱之為陣列的長度。

現在再看看問題 第一個是 字串,第二個是字元陣列 ,字串以'\0'為結束符號,字元陣列不用。

那就很明白了。b 對。

要說明的是,雖然他們長度相同,不過佔的記憶體位元組數是不一樣的,第一個佔7個位元組(後面的'\0'佔一個。)第二個佔6個位元組。

12樓:酷兒

#include

void main()

;m=sizeof(a);

n=sizeof(b);

printf("a 所佔位元組數 %d,b 所佔位元組數 %d\n",m,n);

}所以選d

13樓:用飄柔洗腳丫

#include

#include

using namespace std;

int main();

cout<:67

答案自己猜

14樓:喜歡種蘑菇

答案是d,a陣列比b陣列長度長

原因:a陣列的長度是6,b陣列的長度是7。

在c語言中沒有專門的字串變數,通常用一個字元陣列來存放一個字串。字串總是以'\0'作為串的結束符。

因此當把一個字串存入一個陣列時,也把結束符 '\0'存入陣列,並以此作為該字串是否結束的標誌。

即陣列a的實際存放情況為:a b c d e f '\0'  而陣列b的實際存放情況為:a b c d e f

詳細說明:

把一個字串賦值給陣列:u4 str1=;

實際上陣列str1在記憶體中的實際存放情況為: c x k n m s l '\0'

這後面的'\0'是由c編譯系統自動加上的。所以在用字串賦初值時一般無須指定陣列的長度, 而由系統自行處理。

把字元陣列str1中的字串拷貝到字元陣列str2中,串結束標誌'\0'也一同拷貝。

個案:1、當陣列長度不夠。假設我們指定了陣列長度,如:u4 str1[7]=;

由於字元組str1的長度為7,所以後面的資訊會丟失,即'\0'丟失。

2、如果在給陣列賦值時,把每個字元單獨用引號括起來,也會丟失'\0'。

如:u4 str1=;

如果希望陣列以'\0'結束,則可以寫成以下三者之一:

u4 str1=; //字串賦值

u4 str1=; //人工新增

u4 str1[8]=; //故意給陣列預留一個空位

c語言字串問題,求正確答案和解釋 假設已定義char a[10]和char *p=a, 下面的賦

15樓:匿名使用者

正確答案是d

a錯誤,因為a[10]代表一個字元是吧,不能賦值字串b錯誤是因為 陣列名不能當左值,也就是陣列名不能被賦值c和a同樣的錯誤,*p代表的是a[0]

d是正確的給指標賦值字串是可以的

c語言:char * =」abcdef」; char a[]=」abcdef」; 編譯之前的區別

16樓:匿名使用者

char * a = "abcdef";

表示的是:a是一

個字串指標,指向的是一個字串常量"abcdef",所以如果用*a =『x』這樣的重新賦值是不允許的(也就是修改字串常量"abcdef"是不允許的)。用a=這樣的賦值是可以的,也就是a指向了另外的地址。

char a = "abcdef";

表示的是:a是一個字元型陣列,並且初始化的數值是共有7個元素,那麼當然可以修改陣列中的數值。

17樓:匿名使用者

編譯之前的區別就是指標定義錯了吧 *後邊得有識別符號 別的區別就是一個是指標型別 一個字元型別

c語言,char a[]="abc"。

18樓:匿名使用者

等價於char a[4]="abc"。

還有復個自動加上的字元制串結束符。

這是陣列初始化自然會分配記憶體,因為在初始化時使用了""引號,所以會自動加上\0。

一個char是8個位,也就是一個位元組,所以須要在棧上開闢四個字元的大小空間。

有一種情況例外

char *const p = "abc";

該 字串被分配到字元常量區。返回一個指標交給p。並不會開新的棧上空間。

只所以要加const是因為他指向的是靜態常量不能修改。當然你可以改這個p指向的地址

19樓:匿名使用者

像這樣的問題bai最好自己du測試一下,

下面是zhic、c++測試dao,, 如果自己不動專手,學不到東西的屬

#include

#include

using namespace std;

char ss="abc";

int main()

結果 4313088 abc

20樓:匿名使用者

1. 會,系統在初始化時就為字串"abc「分配了記憶體

2. 這個」abc"的地址就是陣列a的首地址

c語言中,如果char a[ ]=abc,那麼a[6]是什麼

21樓:金色潛鳥

char a[ ]=abc; 有語法錯誤,初始化需要用花括號括起來,例如:

char a=;

這裡 abc 應當是 整數,並且已定義過。例如:

#define abc 65

char a= ;

初始化 得到 sizeof(a) 是 1。 也就是說,陣列只有1個元素,最大下標 0。

那麼 a[6] 是 沒有定義的陣列元素,下標超界,a[6] 的地址是 (a + 6), 數值 不確定。

關於C語言,關於C語言中 和 的用法

c語言是我現在的主用語言,因為它很強大。你不明白的地方我以前也很躊躇。原因是我們還只是c語言的初學者。平時,我們編輯完成,在視窗執行,實際上這是我們在檢測我們編輯的 是否有效。這是編譯環境提供給我們的一個視覺化視窗。當然,我們的程式裡也有體現 這主要是用來檢驗我們的邏輯。當我們能逐漸掌握了c語言的邏...

關於c語言的問題,關於C語言的問題。

題1 include int main 題2 include int main 題3 include int main 第1個題目 就是判斷while 括號裡面的值是否為真,因為加了個!所以 k 0 n 為真時while裡面的判斷語句就為假,因為 為邏輯與,就是判斷 兩邊的式子是否為真,當k 0為真...

C語言小問題,關於,關於C語言的小問題?

a b max a max b 語法錯誤,該為 a b max a max b 另外注意 printf 最大值為 c n c 改正為printf 最大值為 d n c 已測試關於i 和 i的區別,如果沒有賦值的話,他們結果是沒區別的,關於他們的區別,我舉例說明 1 int i 0,a a i 這裡結...