函數中char c[]="hello"與char * c = "hello"區別 -- C

來源:互聯網
上載者:User

標籤: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*/


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.