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

2022-03-11 06:16:55 字數 5399 閱讀 1579

1樓:匿名使用者

簡單說一下:

字元(非字串陣列,字元陣列和字串陣列是有區別的,字串陣列每個元素都是一個字串)陣列是用來存放字元的陣列,在記憶體中佔一段連續的單元。所佔記憶體存放的是字串。定義方法為:

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"

2樓:田口誇激

首先第一點,非常重要的一點:指標和陣列是不同的兩個型別!

我們從可以從c語言標準文件中得知:

iso/iec 9899:1999 - programing language c

6.2.5 types

3樓:遊濟典空

字元陣列名與字串指標變數名的區別2009-01-19

19:08授課內容:

一、字串指標變數的說明和使用

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

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

char

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

char

*s="c

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

請看下面一例。main()

執行結果為:

clanguage

上例中,首先定義ps是一個字元指標變數,

然後把字串的首

地址賦予ps(應寫出整個字串,以便編譯系統把該串裝入連續的一

塊記憶體單元),並把首地址送入ps。程式中的:

char

*ps;

ps="c

language";等效於:

char

*ps="c

language";

輸出字串中n個字元後的所有字元。

二、字元指標變數的運算

main()

執行結果為:

book

在程式中對ps初始化時,即把字串首地址賦予ps,當ps=

ps+10之後,ps指向字元「b」,因此輸出為"book"。

main()

if(ps[i]=='\0')

printf("there

isno

'k'in

thestring\n");

}本例是在輸入的字串中查詢有無『k』字元。

三、字串指標作為函式引數的使用。

要求把一個

字串的內容複製到另一個字串中,並且不能使用strcpy函式。函

數cprstr的形參為兩個字元指標變數。pss指向源字串,pds指向目標字串。表示式:

(*pds=*pss)!=`\0'

cpystr(char

*pss,char

*pds)

}main()

在上例中,程式完成了兩項工作:一是把pss指向的源字元複製

到pds所指向的目標字元中,二是判斷所複製的字元是否為`\0',若

是則表明源字串結束,不再迴圈。否則,pds和pss都加1,指向下

一字元。

四、使用字串指標變數與字元陣列的區別

用字元陣列和字元指標變數都可實現字串的儲存和運算。

但兩者是有區別的。在使用時應注意以下幾個問題:

1.字串指標變數本身是一個變數,用於存放字串的首地址。而字串本身是存放在以該首地址為首的一塊連續的記憶體空間中並以『\0』作為串的結束。

字元陣列是由於若干個陣列元素組成的,它可用來存放整個字串。

2.對字元陣列作初始化賦值,必須採用外部型別或靜態型別,如:

static

char

st=;而對字串指標變數則無此限制,如:

char

*ps="c

language";

3.對字串指標方式

char

*ps="c

language";可以寫為:

char

*ps;

ps="c

language";

而對陣列方式:

static

char

st=;不能寫為:

char

st[20];

st=;而只能對字元陣列的各元素逐個賦值。

從以上幾點可以看出字串指標變數與字元陣列在使用時的區別,同時也可看出使用指標變數更加方便。

前面說過,當一個指標變數在未取得確定地址前使用是危險的,容易引起錯誤。但是對指標變數直接賦值是可以的。因為c系統對指標變數賦值時要給以確定的地址。因此,

char

*ps="c

langage";或者

char

*ps;

ps="c

language";都是合法的。

字元陣列與字元指標變數的區別

4樓:匿名使用者

字元陣列名與字串指標變數名的區別2009-01-19 19:08授課內容:

一、字串指標變數的說明和使用

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

對指向字元變數的指標變數應賦予該字元變數的地址。如: char c,*p=&c;表示p是一個指向字元變數c的指標變數。

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

請看下面一例。main()

執行結果為:

c language

上例中,首先定義ps是一個字元指標變數, 然後把字串的首

地址賦予ps(應寫出整個字串,以便編譯系統把該串裝入連續的一

塊記憶體單元),並把首地址送入ps。程式中的: char *ps;

ps="c language";等效於: char *ps="c language";

輸出字串中n個字元後的所有字元。

二、字元指標變數的運算

main()

執行結果為:

book

在程式中對ps初始化時,即把字串首地址賦予ps,當ps= ps

+10之後,ps指向字元「b」,因此輸出為"book"。

main()

if(ps[i]=='\0') printf("there is no 'k' in the string\n");

}本例是在輸入的字串中查詢有無『k』字元。

三、字串指標作為函式引數的使用。

要求把一個 字串的內容複製到另一個字串中,並且不能使用strcpy函式。函

數cprstr的形參為兩個字元指標變數。pss指向源字串,pds指向目標字串。表示式: (*pds=*pss)!=`\0'

cpystr(char *pss,char *pds)

}main()

在上例中,程式完成了兩項工作:一是把pss指向的源字元複製

到pds所指向的目標字元中,二是判斷所複製的字元是否為`\0',若

是則表明源字串結束,不再迴圈。否則,pds和pss都加1,指向下

一字元。

四、使用字串指標變數與字元陣列的區別

用字元陣列和字元指標變數都可實現字串的儲存和運算。 但兩者是有區別的。在使用時應注意以下幾個問題:

1. 字串指標變數本身是一個變數,用於存放字串的首地址。而字串本身是存放在以該首地址為首的一塊連續的記憶體空間中並以『\0』作為串的結束。

字元陣列是由於若干個陣列元素組成的,它可用來存放整個字串。

2. 對字元陣列作初始化賦值,必須採用外部型別或靜態型別,如: static char st=;而對字串指標變數則無此限制,如: char *ps="c language";

3. 對字串指標方式 char *ps="c language";可以寫為: char *ps;

ps="c language"; 而對陣列方式: static char st=;不能寫為: char st[20]; st=;而只能對字元陣列的各元素逐個賦值。

從以上幾點可以看出字串指標變數與字元陣列在使用時的區別,同時也可看出使用指標變數更加方便。

前面說過,當一個指標變數在未取得確定地址前使用是危險的,容易引起錯誤。但是對指標變數直接賦值是可以的。因為c系統對指標變數賦值時要給以確定的地址。

因此, char *ps="c langage";或者 char *ps; ps="c language";都是合法的。

5樓:匿名使用者

字元陣列是一塊連續的儲存若干個字元的地址裡的值

字元指標變數是一個地址,這個指標的有效範圍可能是1個地址,也可能是某一塊連續的地址

char *s是個指標,char s是個陣列,用做函式宣告的引數時,都可以

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

首先第一點,非常重要的一點 指標和陣列是不同的兩個型別!我們從可以從c語言標準文件中得知 iso iec 9899 1999 programing language c 6.2.5 types 20 這說明了什麼是陣列型別 同樣在20 說明了什麼是指標型別。在瞭解了兩種型別的基礎上,我們瞭解陣列和指...

c語言字串陣列和字元陣列有什麼區別

這個是字元陣列。c語言字元陣列和字串的區別,字元陣列是一個儲存字元的陣列,而字串是一個用雙括號括起來的以 0 結束的字元序列,雖然字串是儲存在字元陣列中的,但是一定要注意字串的結束標誌是 0 總的來說是沒有區別的,字串就是以字元陣列形式儲存的。可以把一個字串看成是一個字元陣列,可以按陣列那樣操作。兩...

字元常量與字串常量有什麼區別字元常量和字串常量有什麼區別?

字串常量是以雙引號引起來的資料,比如說 12343 chinere 這是一個字串常量 等等 是以 0 為結束標誌的 也是就是說比如 1234 其實長度是5,因為其實還有一個隱藏的 0 而字元常量是單引號引起來的資料,比如說 a 7 百 在c語言中字元的長度是一個位元組,所以 如果是ascii碼錶中的...