C字串陣列初始化為空串

2021-06-24 11:34:14 字數 3215 閱讀 6908

本文**:

在c語言程式設計中,當我們宣告乙個字串陣列的時候,常常需要把它初始化為空串。總結起來有以下三種方式:

(1) char str[10]="";

(2) char str[10]=;

(3) char str[10]; str[0]='\0';

第(1)(2)種方式是將str陣列的所有元素都初始化為'\0',而第(3)種方式是只將str陣列的第乙個元素初始化為'\0'。如果陣列的size非常大,那麼前兩種方式將會造成很大的開銷。所以,除非必要(即我們需要將str陣列的所有元素都初始化為0的情況),我們都應該選用第(3)種方式來初始化字串陣列。

***************=

陣列可以初始化,即在定義時,使它包含程式馬上能使用的值。

例如,下面的**定義了乙個全域性陣列,並用一組fibonacci數初始化:

int iarray[10]=

初始化陣列的值的個數不能多於陣列元素個數,初始化陣列的值也不能通過跳過逗號的方式來省略,這在c中是允許的,但在c++中不允許。

例如,下面的**對陣列進行初始化是錯誤的:

int arrayl[5]=; //error: 初始化值個數多於陣列元素個數

int array2[5]=; //error:初始化值不能省略

int array3[5]=; //error:初始化值不能省略

int array4[5]={}; //error:語法格式錯誤

void main()

初始化值的個數可少於陣列元素個數。當初始化值的個數少於陣列元素個數時,前面的按序初始化相應值, 後面的初始化為0(全域性或靜態陣列)或為不確定值(區域性陣列)。

例如,下面的程式對陣列進行初始化:

//*********************

//**   ch7_2.cpp  **

//*********************

#include

int array1[5]=;

static int array2[5]=;

void main()

;static int arr2[5]=;

int n;

cout <<"global:\n";

for(n=0; n<5; n++)

cout <<" " for(n=0; n<5; n++)

cout <<" " for(n=0; n<5; n++)

cout <<" " for(n=0; n<5; n++)

cout <<" " 《執行結果為:

global:

l  2  3  0  0

global static:

1  0  0  0  0

local:

2 23567 23567 23567 23567

local static:

1  2  0  0  0

例中,全域性陣列和全域性靜態陣列的初始化是在主函式執行之前完成的,而區域性陣列和區域性靜態陣列的初始化是在進入主函式後完成的。

全域性陣列arrayl[5]對於初始化表的值按序初始化為1,2,3,還有兩個元素的值則按預設初始化為0。

全域性靜態陣列array2[5]與全域性陣列的初始化情況一樣,初始化錶值(1)表示第1個元素的值,而不是指全部陣列元素都為1。

區域性陣列arrl[5]根據初始化錶值的內容按序初始化, 由於初始化錶值只有1個,所以還有4個元素的值為不確定。在這裡均為數值23567。

區域性靜態陣列arr2[5]先根據初始化表按序初始化,其餘3個陣列元素的值預設初始化為0。

2.初始化字元陣列

初始化字元陣列有兩種方法,一種是:

char array[10]=;

另一種是:

char array[10]=;

第一種方法用途較廣,初始化時,系統自動在陣列沒有填值的位置用,'\0'補上。另外, 這種方法中的花括號可以省略,即能表示成:

char array[10]="hello";

第二種方法一次乙個元素地初始化陣列,如同初始化整型陣列。這種方法通常用於輸入不容易在鍵盤上生成的那些不可見字元。

例如,下面的**中初始化值為若干製表符:

char charray[5]=;

編譯時必須知道陣列的大小。通常,宣告陣列時方括號內的數字決定了陣列的大小。有初始化的陣列定義又省略方括號中的陣列大小時,編譯器統計花括號之間的元素個數,以求出陣列的大小。

例如,下面的**產生相同的結果:

static int a1[5]=;

static int a2=;

讓編譯器得出初始化陣列的大小有幾個好處。它常常用於初始化乙個元素個數在初始化中確定的陣列,提供程式設計師修改元素個數的機會。

在沒有規定陣列大小的情況下,怎麼知道陣列的大小呢? sizeof操作解決了該問題。 例如,下面的**用sizeof確定陣列的大小:

//*********************

//** ch7_3.cpp **

//*********************

#include

void main()

;for(int i=0; i<(sizeof(a)/sizeof(int)); i++)

cout 《執行結果為:

1 2 4 8 16

sizeof操作使for迴圈自動調整次數。如果要從初始化a陣列的集合中增刪元素,只需重新編譯即可,其他內容無須更動。

每個陣列所佔的儲存量都可以用sizeof操作來確定! sizeof返回指定項的位元組數。sizeof常用於陣列,使**可在16位機器和32位機器之間移植:

對於字串的初始化,要注意陣列實際分配的空間大小是字串中字元個數加上末尾的,'\0',結束符。

例如,下面的**定義乙個字元陣列:

//*********************

//**   ch7_4.cpp  **

//*********************

#include

void main()

{char ch="how are you";

cout <<"size of array: " 《執行結果為:

size of array:12

size of string:ll

例中,陣列大小為12,而字串長度為11。

省略陣列大小只能在有初始化的陣列定義中。

例如,下面的**將產生乙個編譯錯誤:

int a;//error:沒有確定陣列大小

在定義陣列的場合,無論如何,編譯器必須知道陣列的大小。

C字串陣列初始化為空串

在c語言程式設計中,當我們宣告乙個字串陣列的時候,常常需要把它初始化為空字元 null 總結起來有以下三種方式 1 char str 10 2 char str 10 3 char str 10 str 0 0 0和 0 是不一樣的 char a 2 這是所有字元初始化為空格 char a 10 意...

字串陣列初始化

1 char arr 10 hi 初始化字串陣列時,編譯器自動將字串最後乙個字元後面加上 0 以表示字串的結束。如果陣列的大小大於字串的長度 1,那麼把字串結束後面的元素也都初始化為 0 看這段程式 定義乙個大小為12的字串陣列 char str1 12 jiajia 讓乙個char型的指標指向這個...

字串轉化為陣列,陣列轉化為字串。

做題中常遇到字串轉化為數字,數字轉化為字串等,自己轉化比較麻煩,c語言提供了幾個標準庫函式,可以將任意型別 整型 長整型 浮點型等 的數字轉換為字串。1.整數轉化為字串。itoa include include int main itoa 函式有3個引數 第乙個引數是要轉換的數字,第二個引數是要寫入...