字元指標,字串和字元陣列的區別

2022-03-06 02:47:53 字數 5841 閱讀 3415

1樓:冬天終將過去

定義:char ch[10];

char ch2;

char* str;

以及"string"。

1.全域性的變數和函式內的static變數,存放在記憶體堆區域。

2.全域性的陣列和函式內定義的static的陣列,存放在記憶體堆區域。

3.區域性變數,陣列,存放在記憶體的棧區域。

4.定義char ch[10]時,如果是全域性或者static的,就在堆區域給他分配10byte的空間,並且如果使用者沒有給它初值,10byte資料全部置零。

5.定義char ch[10]時,如果是區域性陣列(在函式內定義且不是static的),則在棧區域分配10byte的空間,如果使用者沒有給它初值,10byte的資料未知,為記憶體中原來的不確定資料。

2樓:匿名使用者

字元指標變數和字元陣列的區別:

簡單說一下:

字串陣列是用來存放字串的陣列,在記憶體中佔一段連續的單元。所佔記憶體存放的是字串。定義方法為:

char a[n];n為常量表示式,可初始化。字元指標是指向字元的指標,所佔記憶體單元存放的是所指字元的記憶體單元。定義方法為:

char *p;

完整的解答:

1)字元陣列由若干個元素組成,每個元素中放一個字元,而字元指標變數中存放的地址(字串第一個字元的地址),決不是將字串放到字元指標變數中

2)賦值方式

對於字元陣列只能對各個元素賦值,不能用以下辦法對字元陣列賦值:

char str[14];

str = "i love you!";

而對於字元指標變數,可採用如下賦值:

char *a;

a = "i love you!";

賦值給a的是字串第一個元素的地址

3)對字元指標賦初值

char *a = "i love you!";

等價於char *a;

a = "i love you!";

而對陣列的初始化:

char str[14] = ;

不等價於

char str[14];

str = "i love you!";

4)如果定義了一個字元陣列,在編譯時為它分配記憶體單元,它有確定的地址。而定義一個字元指標變數時,給指標變數分配記憶體單元,在其中可以放一個字元變數的地址

char *a, str[10];

a = str;

scanf("%s", a);

先使a有確定值,即使a指向一個陣列的首元素,然後輸入一個字串,把它存放在以該地址開始的若干單元中

5)指標變數的值是可以改變的,而陣列名是常量

6)用指標變數指向一個格式字串,可以用它代替printf函式的格式字串

char * format;

fomat = "a = %d, b = %f\n"

printf(format, a, b);

相當於printf("a = %d, b = %f\n", a, b);

因此只要改變printf所指向的字串,就可以改變輸入輸出格式,這種printf函式稱為可變格式輸出函式

也可以用字元陣列實現:

char format;

format = "a = %d, b = %f\n"

可以看出,用指標變數指向字串更簡潔

指標與陣列 字元指標,字串和字元陣列的區別

3樓:士楓終靈凡

字元指標變數和字元陣列的區別:

簡單說一下:

字串陣列是用來存放字串的陣列,在記憶體中佔一段連續的單元。所佔記憶體存放的是字串。定義方法為:char

a[n];n為常量表示式,可初始化。字元指標是指向字元的指標,所佔記憶體單元存放的是所指字元的記憶體單元。定義方法為:char

*p;完整的解答:

1)字元陣列由若干個元素組成,每個元素中放一個字元,而字元指標變數中存放的地址(字串第一個字元的地址),決不是將字串放到字元指標變數中

2)賦值方式

對於字元陣列只能對各個元素賦值,不能用以下辦法對字元陣列賦值:

char

str[14];

str=

"ilove

you!";

而對於字元指標變數,可採用如下賦值:

char

*a;a="i

love

you!";

賦值給a的是字串第一個元素的地址

3)對字元指標賦初值

char*a=

"ilove

you!";

等價於char

*a;a="i

love

you!";

而對陣列的初始化:

char

str[14]=;

不等價於

char

str[14];

str=

"ilove

you!";

4)如果定義了一個字元陣列,在編譯時為它分配記憶體單元,它有確定的地址。而定義一個字元指標變數時,給指標變數分配記憶體單元,在其中可以放一個字元變數的地址

char

*a,str[10];a=

str;

scanf("%s",

a);先使a有確定值,即使a指向一個陣列的首元素,然後輸入一個字串,把它存放在以該地址開始的若干單元中

5)指標變數的值是可以改變的,而陣列名是常量

6)用指標變數指向一個格式字串,可以用它代替printf函式的格式字串

char

*format;

fomat="a

=%d,b=

%f\n"

printf(format,

a,b);

相當於printf("a

=%d,b=

%f\n",

a,b);

因此只要改變printf所指向的字串,就可以改變輸入輸出格式,這種printf函式稱為可變格式輸出函式

也可以用字元陣列實現:

char

format;

format="a

=%d,b=

%f\n"

可以看出,用指標變數指向字串更簡潔

c語言字元指標和字元陣列的區別

4樓:繁楚餘甲

推薦回答裡面是有問題的,對於指向字元的指標來講,其指向內容是否可變,要看他指向的內容,指向字元的指標可以指向兩種字串:1.字串常量,如char

*q="abcd",這裡q指向的內容是不可變的,即q[1]='a'是不合法的;2.字串變數,如char

p[10],然後給p賦值,然後char

*q=p,這裡的q指向的內容是可以變的

需要注意的是,這裡是q指向的內容是否可變,而不是q指向的記憶體是否可變也就是說1中的q可以有q=p(p也是一個字元指標)這樣的操作

5樓:昝蝶欒歌

兩個用法差不多,唯一的區別在於字元陣列的值在程式執行過程中是可以修改的,但是字元指標的值在執行過程中是不能修改的。

#include

using namespace std;

int main()

6樓:士楓終靈凡

字串指標變數本身是一個變數,用於存放字串的首地址。而字串本身是存放在

以該首地址為首的一塊連續的記憶體空間中並以『\0』

作為串的結束。字元陣列是由於若干個數

組元素組成的,它可用來存放整個字串

char

*p=「c

language」;

char

p=;可以理解為:字元指標是字元陣列的退化但是實際使用中,字串指標卻比字元陣列更好用

7樓:隆耕順須倩

字串指標變數的定義說明與指向字元變數的指標變數說明是相同的。只能按對指標變數的賦值不同來區別。

對指向字元變數的指標變數應賦予該字元變數的地址。如:

char

c,*p=&c;表示p是一個指向字元變數c的指標變數。而:

char

*s="c

language";則表示s是一個指向字串的指標變數。把字串的首地址賦予s。

字串陣列與字元指標的區別

8樓:大野瘦子

一、 讀寫能力

char *a = 「abcd」; 此時"abcd"存放在常量區。通過指標只可以訪問字串常量,而不可以改變它。

而char a[20] = 「abcd」; 此時 "abcd"存放在棧。可以通過指標去訪問和修改陣列內容。

二、用法

在程式設計過程中如果只涉及到對字串的讀取,那麼字元陣列和字串常量都能夠滿足要求,如果有寫入(修改)操作,那麼只能使用字元陣列,不能使用字串常量。

c語言有兩種表示字串的方法,一種是字元陣列,另一種是字串常量,它們在記憶體中的儲存位置不同,使得字元陣列可以讀取和修改,而字串常量只能讀取不能修改。

三、存取效率

char *a = 「abcd」; 存於靜態儲存區。在棧上的陣列比指標所指向字串快,因此慢。

而char a[20] = 「abcd」; 存於棧上,更快。

9樓:匿名使用者

字元指標變數和字元陣列的區別:

簡單說一下:

字串陣列是用來存放字串的陣列,在記憶體中佔一段連續的單元。所佔記憶體存放的是字串。定義方法為:

char a[n];n為常量表示式,可初始化。字元指標是指向字元的指標,所佔記憶體單元存放的是所指字元的記憶體單元。定義方法為:

char *p;

完整的解答:

1)字元陣列由若干個元素組成,每個元素中放一個字元,而字元指標變數中存放的地址(字串第一個字元的地址),決不是將字串放到字元指標變數中

2)賦值方式

對於字元陣列只能對各個元素賦值,不能用以下辦法對字元陣列賦值:

char str[14];

str = "i love you!";

而對於字元指標變數,可採用如下賦值:

char *a;

a = "i love you!";

賦值給a的是字串第一個元素的地址

3)對字元指標賦初值

char *a = "i love you!";

等價於char *a;

a = "i love you!";

而對陣列的初始化:

char str[14] = ;

不等價於

char str[14];

str = "i love you!";

4)如果定義了一個字元陣列,在編譯時為它分配記憶體單元,它有確定的地址。而定義一個字元指標變數時,給指標變數分配記憶體單元,在其中可以放一個字元變數的地址

char *a, str[10];

a = str;

scanf("%s", a);

先使a有確定值,即使a指向一個陣列的首元素,然後輸入一個字串,把它存放在以該地址開始的若干單元中

5)指標變數的值是可以改變的,而陣列名是常量

6)用指標變數指向一個格式字串,可以用它代替printf函式的格式字串

char * format;

fomat = "a = %d, b = %f\n"

printf(format, a, b);

相當於printf("a = %d, b = %f\n", a, b);

因此只要改變printf所指向的字串,就可以改變輸入輸出格式,這種printf函式稱為可變格式輸出函式

也可以用字元陣列實現:

char format;

format = "a = %d, b = %f\n"

可以看出,用指標變數指向字串更簡潔

c語言字串陣列的問題C語言字串陣列的問題

include int main scanf s a for i 0 a i 0 i for j 0 j 5 j 修改 1 下標從0 4,共5個 return 0 每行結尾的 僅僅是為了連線字串使用的,如果一個字串過長,寫在一行比較不合適,就在該行結尾處加上一個反斜槓 就可以在下邊的行繼續寫這個字串...

任意輸入字元組成字串,對該字串中的字元按ASCII碼值升序排列後輸出,程式設計實現此功能

在手機知道中已有 知道君 正確的回答,電腦中為何看不見呢 public class form1 不限制輸入的字元個數 private sub button1 click byval sender as system.object,byval e as system.eventargs handles...

matlab中,陣列和字串陣列的區別。將陣列轉化為字串陣列到底什麼意思是

二者的組成不同 陣列的組成元素是複數,字串陣列的組成元素是數字字串 二者的精度不同,陣列表示的數都是近似值,字串陣列表示的值都是精確值。例如陣列的1 3表示為0.3333,字串陣列表示的是1 3。二者的運算不同,比如陣列有 等運算,但字串陣列只有 和 兩種運算。字串陣列中還有許多數值運算中所沒有的特...