1. 程式人生 > >C語言中的初始化問題

C語言中的初始化問題

經常在C語言工程中,尤其是比較大的程式,執行過程中會出現由於記憶體或堆疊導致的各種問題,輸出錯誤或執行崩潰~~

1.字串陣列的初始化
(1) char str[10]="";
(2) char str[10]={’\0’};
(3) char str[10]; str[0]=’\0’;

2.字元陣列的初始化
int a[5] = { 0 };
錯誤:int a[5] = { 1 }; //只有第一個元素賦值為1,其他都為0.
遵循規則:陣列初始化列表中的元素個數小於指定的陣列長度時,不足的元素補以預設值。

如果想在陣列建立結束後再對其進行初始化,可以使用C函式memset(),但是memset的使用有個大問題,就是它只對char型別的陣列管用:
char a[10];
memset(a, 0, 10);
如果將上面的a陣列換成int或其他型別的,就會出現問題,因為memset的內部實現是以位元組為單位進行賦值的,int 型別(4位元組)大於一個位元組。

3. 指標的初始化
(1)一般用NULL或空指標常量,如:int *p = NULL;char *p = 0; 或 float p = 0;
(2)取一個物件的地址然後賦給一個指標,如:int i = 3; int ip = &i;
(3) 將一個指標常量賦給一個指標,如:long *p = (long *) 0x fffffff0;
(4)將一個T型別陣列的名字賦給一個相同型別的指標,如:
char ary[100]; char *cp = ary;
(5)將一個指標的地址賦給一個指標,如:
int i = 3;int *ip = &i;int **pp = &ip;
(6) 將一個字串常量賦給一個字元指標,如:char *cp = “abc”;