標籤:os 資料 io ar har 字串 總結 儲存
char c[]="hello"
是局部資料。
c[0] = ‘t‘; // ok
char * c = "hello"
全域資料,在靜態儲存地區。
*c = ‘t‘; // false
#include <stdio.h>/*例子一 */const char * strA(){/*正確 通過static開闢一段靜態儲存空間*/static char str[] = "hello";/*錯誤 分配一個局部資料,函數結束記憶體的棧釋放 返回後的結果是不確定的且不安全,隨時都有被回收的可能*/char str[] = "hello";/*正確 分配一個全域數組,記憶體的全域地區*/char * str = "hello";return str;}/*例子二 */intmain(){static char str1[] = "hello";char str2[] = "hello";char * str3 = "hello";char * str4 = "hello";printf("str1 = 0x%x\n", str1);printf("str2 = 0x%x\n", str2);printf("str3 = 0x%x\n", str3);printf("str4 = 0x%x\n", str3);/*現象總結:1、str1、str3、str4的地址始終不變。2、str3、str4地址相同。3、str2的地址在一直變數。解釋原因:1、str1、str3、str4地址是在靜態儲存空間。2、str3、str4在靜態儲存空間同字串。3、str2是在棧空間。*/}/*連續運行了5次[[email protected] test_class]# ./a.out str1 = 0x8049734str2 = 0xbf921e42str3 = 0x8048530str4 = 0x8048530[[email protected] test_class]# ./a.out str1 = 0x8049734str2 = 0xbfd174a2str3 = 0x8048530str4 = 0x8048530[[email protected] test_class]# ./a.out str1 = 0x8049734str2 = 0xbfa84cd2str3 = 0x8048530str4 = 0x8048530[[email protected] test_class]# ./a.out str1 = 0x8049734str2 = 0xbffd3472str3 = 0x8048530str4 = 0x8048530[[email protected] test_class]# ./a.out str1 = 0x8049734str2 = 0xbf954982str3 = 0x8048530str4 = 0x8048530*/