1、使用函式進行初始化
void *memset(void *s, int ch, size_t n)
將s中前n個位元組 (typedef unsigned int size_t)用 ch 替換並返回 s 。
在使用之前,c中引入string.h,而c++中引入cstring
(1)初始化整數陣列
const int n=10000;
int f[n];
memset(f,255,sizeof(f));// 將f的前1000*4個位元組初始化為255,二進位制為1111-1111。表示的值為-1,連續取4個位元組的值時同樣為-1.
printf("%d\n",sizeof(f));//40000個位元組,說明每個整數占用4個位元組.將每個位元組初始化為255
printf("%d %d",f[0],f[1]);// 列印結果全部為-1
使用函式memset()進行初始化時,有很多人犯如下錯誤:
int p[100];
memset(p,100,sizeof(p));
想使用如上**將數陣列初始化為100,這是不可能的。它只是將每個位元組表示為100,而後連續取出4個位元組,這個數就非常大了。
(2)初始化bool型別陣列
bool b[100];
memset(b,0,sizeof(b));//就是初始化為false
(3)二維陣列的初始化
char data[10][10];
memset(data, '#', sizeof(data));
將所有的字元初始化為'#' (4
)結構體初始化
struct nodenn[100];
int main()
2、指定初始值
char str[10] = ;
if(str[0]==null) printf("yes\n");
if(str[0]=='\0') printf("yes\n");
printf("%d",str[0]);
輸出結果為:yes yes 0。所以這裡10個元素會被賦值為 null 字元(空字元),這個就是指'\0'。直接列印str[0]的值會發現,顯示的就是空字元,啥也沒有,但強制轉換後你會發現它的ascii碼值為0,它佔乙個位元組,其中8位全為0。
再來看乙個例子:
int main()
; char str2 = ;
int len1 = strlen(str1);//0
int len = strlen(str2);//0
char a = '\0';
printf("len=%d;len1=%d,a=%c\n",len,len1,a);輸出為0,0,空
return 0;
}
char a = '\0'; //賦值為休止符,列印出來空,什麼都沒有,但會佔乙個字元的位置,而且它不是空格,因為ascii值為0,不是32。
char str = ; //定義陣列,三個元素都是休止符,sizeof結果為3,但strlen的結果是0。
char str1[10] = ; //這樣的賦值實際上就是賦10個空字元,就是'\0', ascii碼為0
在操作字元陣列時對以下幾種情況進行區分:
char str[100];// 宣告不指定初始值,這時候裡面的為隨機數
str[0]=='0' // 陣列的第乙個數為0字元
str[i]==0 // 字串結束
str[i]==' ' // 空格
弄清如上的問題後接著往下看:
char str[10];
strcpy(str,0123456789);//由於字串的末尾還有乙個'\0'字元,因此它的實際長度應該為11
如上的**將出現錯誤,這也是人們常犯的乙個錯誤。
int main()
; int b[10]=;
printf("%d\n",b[8]);//結果為0
printf("a的陣列長度為:%d\n",sizeof(a)/4); //結果為1
printf("%d\n",b[8]);//結果為0
return 0;
}
總結一下:
1 指定的初始化數值不能比陣列的元素多,但可以少
2 如果少,則列表中的初值被分配給從第乙個元素開始的連續元素,那些沒有的到初值的元素被初始化為0---明確地說是ascii值為0
3 如果根本沒有提供初始化列表,則情況不是這樣的,陣列將包含的是無用的資料,即記憶體中本來的值
關於C C 初始化
1 使用函式進行初始化 void memset void s,int ch,size t n 將s中前n個位元組 typedef unsigned int size t 用 ch 替換並返回 s 在使用之前,c中引入string.h,而c 中引入cstring 1 初始化整數陣列 const int...
關於初始化
1 成員初始化時 對於區域性變數 必須制定初始值如果未初始化變數就使用 會報錯 提示變數未被初始化 2 如果類的資料成員是基本型別 系統會給沒有指定初始化的變數指定預設值 比如int為0 double為null string為null 如果是引用型別 系統 會給乙個初始值null 此時如果呼叫類的方...
關於初始化及初始化順序
首先,類的成員變數會被自動初始化,並且會在構造器被呼叫前發生,如下 public class testinitialization public static void main string args 如下 主類 public class staticinitialization 呼叫main之前...