字元指標變數和字元陣列的討論

2021-08-11 02:01:49 字數 1553 閱讀 5282

/**

* 經常會弄錯字元指標變數和字元陣列的使用方式

* 寫在這裡方便查閱 :

* * (1)內容不同:

* 字元陣列由若干個元素組成,每個元素放乙個字元。

* 而字元指標變數中存放的是位址(字串第乙個字元的位址),決不是將字串放到字元指標變數中。

* * (2)賦值方式:

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

* char str[14];

* str="i love china!";//************錯誤的賦值方式!**************

* 而對字元指標變數,可以用以下方法:

* char *a;

* a="i love china!";//***賦給a的不是字元,是字串的第乙個元素***

* * (3) 初始化:

* 對陣列的初始化:--陣列可以在定義時整體賦初值,但不能在賦值語句中整體賦值

* char str[14]=;

* 不等價於

* char str[14];

* str="i love china!";

* 對字元指標變數賦初值:

* char *a="i love china!";

* 等價於

* char *a;

* a="i love china!";

** 如果定義了乙個字元陣列,在編譯時為它分配記憶體單元,它有確定的位址 。

* * 而定義乙個字元指標變數時 ,給指標變數分配記憶體單元,在其中可以放乙個

* 字元變數的位址, 但如果未對它賦予乙個位址值,則它並未具體指向乙個確定的

* 字元資料。

* 例如:

* char str[10];

* scanf("%s",str);//正確

* * char *a;

* scanf("%s",a);//錯誤!!!a的位址是不可預料的

* 改正:

* char *a,str[10];

* a=str;

* scanf("%s",a);

* 先使a有確定的值,也就是使a指向乙個陣列的首元素,然後輸入乙個字串,

* 把它存放在以該位址開始的若干單元中。

* * (5)指標變數的值是可以改變的

* 指標變數的值可以改變

* char *a="i love china!";

* a=a+7;

* printf("%s",a);//輸出:china!

* * 陣列名雖然代表位址,但它是常量,它的值是不能改變的

* char str=;

* str=str+7;//[error]incompatible types in assignment of 'char*'to 'char[14]'

* printf("%s",str);

*/

對使用字元指標變數和字元陣列的討論

區別 1 字元陣列由若干個元素組成,每個元素中放乙個字元,而字元指標變數中存放的是位址 字串第乙個字元的位址 2 賦值方式。對字元陣列只能對各個元素賦值,不能用以下方法對字元陣列賦值 char str 20 str i love china 而對字元指標變數,可以用如下方法賦值 char a a i...

字元指標變數和字元陣列的對比

使用字元陣列和指標變數都能實現字串的儲存和運算,但它們兩者之間是有區別的,不應混為一談,主要有一下幾點 1 字元陣列由若干個元素組成,每個元素中放乙個字元,而字元指標變數中存放的是位址 字串中第乙個字元的位址 絕不是將字串放到字元指標變數中。2 賦值方式。可以對字元指標變數賦值,但不能對陣列名賦值。...

字元陣列和字元指標

字元陣列是一段記憶體空間 字元指標是乙個位址,指向一串字元。char str abcd char str abcd 字元陣列是一段記憶體空間 字元指標是乙個位址,指向一串字元 char str abcd char str abcd 上面這兩跳複製語句很相似,其實根本就不是一碼事。對於兩個 abcd ...