字符串賦值給字符指針(char *a="hello")的正確理解方式


字符串賦值給字符指針(char *a="hello")的正確理解方式

分類: C   5719人閱讀  評論(5)  收藏  舉報
Technorati 標簽:  字符串, 數組, 地址, char *;

對於語句  char *a="hello";

        對於這個聲明方式,會造成的誤解是:聲明了一個字符指針(它會指向一個位置),將“字符串”賦值給 指針表達式"*a"所指向的地址。但正解是:聲明了一個字符指針后,並用字符串常量的第一個字符的地址賦值給指針變量a。
        即正確順序是:1.分配內存給字符指針;2.分配內存給字符串;3.將字符串首地址賦值給字符指針; 
       這里有兩點需要考慮清楚的地方:*a只是指向一個字符。舉例如下:

[c++]  view plain copy print ?
 
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. int main(void){  
  5.     char *a="bcd";  
  6.     printf("輸出字符:%c /n", *a);  /*輸出字符,使用"%c"*/<br>    printf("輸出字符:%c /n", *(a+1) );  /*輸出字符,使用"%c"*/  
  7.     printf("輸出字符串:%s /n", a); /*輸出字符串,使用"%s";而且a之前不能有星號"*"  */   
  8.     system("pause");  /*為了能看到輸出結果*/  
  9. }  
  10. /*運行結果如下: 
  11. 輸出字符:b<br>輸出字符:c 
  12. 輸出字符串:bcd*/  

        若字符串常量出現在在表達式中,代表的值為該字符串常量的第一個字符的地址。所以”hello”僅僅代表的是其地址。 
          原聲明方式相當於以下聲明方式:

[c++]  view plain copy print ?
 
  1. char *a;  
  2. a="hello";/*這里字符串"hello"僅僅代表其第一個字符的地址*/  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM