C語言數組空間的初始化詳解


  數組空間的初始化就是為每一個標簽地址賦值。按照標簽逐一處理。如果我們需要為每一個內存賦值,假如有一個int a[100];我們就需要用下標為100int類型的空間賦值。這樣的工作量是非常大的,我們就想到了讓編譯器做一些初始化操作,初始化操作是第一次賦值,第二次賦值就不能再這樣賦值了。

  int a[10]=空間;

  我需要給它一個空間,讓它對這里面的值進行批量處理;比如int a[10]={10,20,30}; //a[1]=10,a[2]=20,a[3]=30,a[4]=…=a[9]=0所以實際上還是批量內存拷貝的結果,未賦值的結果就是0。初始化與我們逐一賦值的效率是一樣的。批量拷貝僅限於第一次賦值。

  注意:數組空間的初始化和變量的初始化本質不同,尤其在嵌入式的裸機開發中,空間的初始化往往需要庫函數的輔助。

  char buf[10]={‘a’,’b’,’c’}; //c的字符串有一個重要的屬性,字符串結尾有一個字符’\0’代表字符串的結束。因為我們這里為字符串空間定義了10個字符的大小,但是有時候我們並沒有使用完這10個字節,打印的時候10個字節的打印也是錯誤的,所以為了給字符串一個結束的標志,讓其它的函數比如printf函數輸出的時候知道它的結尾。

  char buf[]=”abc”; //省略數組大小,C會為數組指定大小,這里就是三個字符加上一個結尾標志,數組大小就是4

  char buf[10]={“abc”};

  char buf[10]=“abc”; //將三個字符批量拷貝到它分配的空間,末尾加’\0’

  char *p=“abc”; //先給三個字符分配空間,再將指針指向字符串的首地址,這指向的是一個常量字符串。

  buf[2]=’e’; //這是可以的

  p[2]= ’e’; //這是不可以的,p指向的是常量區

  測試代碼如下

  我們將這個字符串作為printf函數的參數,它返回的實際上是常量字符串的首地址,而我們這里將它作為一個整型來打印,有一個警告,應該把它作為無符號整型(內存地址是正整型的)來打印。

  運行結果如下

  可以看到的確打印了一個地址,說明雙引號返回的的確是一個地址,正好和我們前面介紹的字符數組獲取到它的首地址,然后依次拷貝,但是字符指針就直接得到它的地址存儲。這些不同的操作就是數據類型具體的操作了。

 

原文鏈接:http://www.maiziedu.com/wiki/c/space/

 


免責聲明!

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



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