關於C C 初始化

2021-06-19 09:39:05 字數 2486 閱讀 2169

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之前...