對於語句 char *a="hello";
對於這個聲明方式,會造成的誤解是:聲明了一個字符指針(它會指向一個位置),將“字符串”賦值給 指針表達式"*a"所指向的地址。但正解是:聲明了一個字符指針后,並用字符串常量的第一個字符的地址賦值給指針變量a。
即正確順序是:1.分配內存給字符指針;2.分配內存給字符串;3.將字符串首地址賦值給字符指針;
這里有兩點需要考慮清楚的地方:①*a只是指向一個字符。舉例如下:
- #include <stdio.h>
- #include <stdlib.h>
- int main(void){
- char *a="bcd";
- printf("輸出字符:%c /n", *a); /*輸出字符,使用"%c"*/<br> printf("輸出字符:%c /n", *(a+1) ); /*輸出字符,使用"%c"*/
- printf("輸出字符串:%s /n", a); /*輸出字符串,使用"%s";而且a之前不能有星號"*" */
- system("pause"); /*為了能看到輸出結果*/
- }
- /*運行結果如下:
- 輸出字符:b<br>輸出字符:c
- 輸出字符串:bcd*/
② 若字符串常量出現在在表達式中,代表的值為該字符串常量的第一個字符的地址。所以”hello”僅僅代表的是其地址。
原聲明方式相當於以下聲明方式:
- char *a;
- a="hello";/*這里字符串"hello"僅僅代表其第一個字符的地址*/