在c 中怎麼用memset給二維char型陣列賦值

2022-05-01 05:09:11 字數 5383 閱讀 3713

1樓:匿名使用者

char array[10][20];

給每個char數值清零:

方法一:memset(array, 0, sizeof(array)); //array不能是指標

方法二:for(int i=0; i<10; i++) memset(array[i], 0, 20);

2樓:匿名使用者

剛剛沒有注意到是二維

char buf[5][10];

memset(buf,0,sizeof(buf));

函式原型

void *memset(void *s, int ch, size_t n);

函式解釋:將s中前n個位元組 (typedef unsigned int size_t)用 ch 替換並返回 s 。

memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法

3樓:匿名使用者

char ch[5][5];

memset (ch[0],0,_countof(ch));

memset (ch[0],0,sizeof(ch));

4樓:匿名使用者

如果你定義的是

char data[55][2];

可以用memset(data,0,sizeof(data));

5樓:

memeset()只能賦0或-1的,

memset(c,0,sizeof(c));

或者memset(c,0,sizeof(char)*二維陣列大小);

char[]陣列該如何賦值

6樓:匿名使用者

#include

#include

int main()

printf("%s\n",c_con2);

}輸出:10;20;30;

各位大哥,c語言二維陣列怎麼用memset()函式

7樓:

用一個迴圈來迴圈賦值為#,c和c++中只知道這個方法

8樓:匿名使用者

例如:char data[10][10];

memset(data, '#', sizeof(data));

有關於c++多維陣列的初始化

9樓:敗筆i無悔

c++是在c語言的基礎上開發的一種物件導向程式語言,應用廣泛。c++支援多種程式設計正規化 --物件導向程式設計、泛型程式設計和過程化程式設計。最新正式標準c++於2023年8月18日公佈。

其程式設計領域眾廣,常用於系統開發,引擎開發等應用領域,是至今為止最受廣大程式設計師受用的最強大程式語言之一,支援類:類、封裝、過載等特性!

陣列必須作為 extern 或者 static 儲存類來定義才能初始化

分行給二維陣列賦初值。如

static int a[3][4]=,,};

這種賦初值方法比較直觀,把第一個花括弧內的資料賦給第一行的元素,第二花括弧內的資料賦給第二行的元素,......,即按行賦初值。

可以將所有資料寫在一個花括弧內,按陣列排列的順序對各元素賦初值。如:

static int a[3][4]=;

效果與前相同。但以第1種方法為好,一行對一行,界限清楚。用第2種方法如果資料多,寫成一大片,容易遺漏,也不易檢查。

可以對部分元素賦初值。

static int a[3][4]=,,};

它的作用是隻對各行第1列的元素賦初值,其餘元素值自動為0。賦初值後陣列各元素為

也可以對各行的某一元素賦初值:

static int a[3][4]=,,};

初始化後的陣列元素如下:

這種方法對非0元素少時比較方便,不必將所有的0都寫出來,只需輸入少量資料。也可以只對某幾行元素賦初值:

static int a[3][4]=};

陣列元素為:

第三行不賦初值。也可以對第二行不賦初值:

static int a[3][4]=,{},};

如果對全部元素都賦初值(即提供全部初始資料),則定義陣列時對第一維的長度可以不指定,但第二維的長度不能省。如

static int a[3][4]=;

與下面的定義等價:

static int a[4]=;

系統會根據資料總個數分配儲存空間,一共12個資料,每行4列,當然可確定為3行。

在定義時也可以只對部分元素賦初值而省略第一維的長度,但應分行賦初值。如

static int a[4]=,{},};

這樣的寫法,能通知編譯系統:陣列共有3行。陣列各元素為memset(buff,0,5*100*sizeof(char));

10樓:和小敘

這個......

不管是多維陣列還是一維陣列,其實都是一個意思,它們存放在記憶體當中都是連續的,只是表示的方法不一樣而已。

要用陣列首先要清楚,一個陣列在定義時長度已經是確定了的(即陣列元素個數確定),確定了編譯器才知道分多少記憶體給這個陣列,不然編譯出錯。如果你在定義陣列時沒有說明陣列長度,只給出陣列各個元素的值,編譯器會根據給出的元素值的個數確定陣列長度。下面的兩種情況:

char arr1[8] = ; //陣列長度為8 能表示到arr1[7]

char arr2[ ] = ; //陣列長度為2 只能表示到arr2[1]

這裡有個預設值的說法。沒初始化的陣列元素它們都預設為0。也就是說,在你定義一個陣列時已經確定了它的長度,如果你不初始化它們,預設都為0 。

你的程式中只是對第一個元素給出了3,其它的都沒有初始值,預設為0。

因此才會輸出0。這很正常。

給你個建議,如果你嫌你定義的陣列太大了,每個都要寫個3,太痛苦了,可以來三層迴圈:

for(i = 0;i < 10;i ++)}}

這樣每個都是3了。

11樓:吥洅丨錯過

我們知道,一維空間是一條線,數學中用一條數軸來表達;二維空間是一個平面,數學中用平面座標系來表達。那麼二維陣列又是什麼樣的呢?

線與面我們用一個下標來描述一維陣列中的某個元素,就好像在用數描述一條線上的點。而所有的資料都是儲存在一條線上。如果我們採用兩個下標,就能形成一個平面,猶如一張**,有行有列,所有的資料就能夠存放到**裡。

我們把二維陣列的兩個下標分別稱為行下標和列下標,在前面的是行下標,在後面的是列下標。

那麼什麼時候要用二維陣列呢?一般有兩種情況,一種是描述一個二維的事物。比如用1表示牆,用0表示通路,我們可以用二維陣列來描述一個迷宮地圖;用1表示有通路,0表示沒有通路,我們可以用二維陣列來描述幾個城市之間的交通情況。

還有一種是描述多個具有多項屬性的事物。比如有多個學生,每個學生有語文、數學和英語三門成績,我們就可以用二維陣列來描述。

對於第二種情況,我們要注意各項屬性應該是同一種資料型別,比如三種學科的成績都是整數。如果出現了姓名(字串屬性),就不能將他們組合到一個二維陣列裡去。所以不要企圖將不同資料型別的屬性整合到一個二維陣列中去。

二維陣列的宣告和初始化

二維陣列的宣告和一維陣列是類似的,不同之處只是多了一個下標:

資料型別陣列名[行數][列數];

要注意,二維陣列的下標也都是從0開始的。

二維陣列的初始化分為兩種,一種是順序初始化,一種是按行初始化,我們來看一段程式,就能夠對它們有所瞭解了:(程式7.4.1)

#include "iostream.h"

#include "iomanip.h"

int main()

;//順序初始化

int array2[3][2]=,,};//按行初始化

cout <<"array1" <

for (int i=0;i<3;i++)//輸出陣列array1

cout <

}cout <<"array2" <

for (int k=0;k<3;k++)//輸出陣列array2

cout <

}return 0;

}執行結果:

array1

4 25 6

13 4

array2

4 25 8

6 8我們可以看出,所謂按順序初始化就是先從左向右再由上而下地初始化,即第一行所有元素都初始化好以後再對第二行初始化。而按行初始化則是用一對大括號來表示每一行,跳過前一行沒有初始化的元素,在行內從左向右地進行初始化。對於沒有初始化的元素,則都是一個不確定的值。

省略第一維的大小

我們在第一節學到,一維陣列的大小可以省略。可是二維陣列的元素個數是行數和列數的乘積,如果我們只告訴電腦元素個數,電腦無法知道究竟這個陣列是幾行幾列。所以,c++規定,在宣告和初始化一個二維陣列時,只有第一維(行數)可以省略。

比如:int array[3]=;

相當於:

int array[2][3]=;

二維陣列在記憶體中的儲存情況

先前已經說明,記憶體是依靠地址來確定記憶體中的唯一一個儲存單元的,即只有一個引數。所以在記憶體中,所有的資料都是像一維陣列那樣順序儲存的。那麼具有兩個下標的二維陣列是怎樣存放到記憶體中的呢?

在記憶體中,先將二維陣列的第一行按順序儲存,接著就是第二行的資料,然後是第三行的資料……右圖(圖7.4)所示的就是一個二維陣列在記憶體中的儲存情況。

向函式傳遞二維陣列

我們知道,陣列作為引數傳遞給函式的是陣列首元素的地址。對於二維陣列來說亦是如此。不過有兩個問題,一個是我們必須讓函式知道行數和列數,這就像我們要讓函式知道一維陣列的大小一樣,防止發生越界訪問。

另一個就是我們必須讓電腦知道這個二維陣列是怎樣的一個**,即必須告知陣列的列數。這和只能省略二維陣列的行數道理是一樣的。下面我們就來看一個向函式傳遞二維陣列的程式:

#include "iostream.h"

#include "iomanip.h"

void disp(int a[2],int r,int c);//告知陣列的列數

int main()

;cout <<"array" <

disp(array,3,2);

12樓:

int arr[10][21][32]=;這樣對多維陣列可以初始化為全0。但遵循的規則是:陣列宣告並初始化時{}中沒有寫全的後面部分被自動初始化為0。

所以你寫int arr[10][21][32]=;的結果是arr[0][0][0]=3,其餘的都是0。想要初始化為全3,可以用memset函式。

13樓:特立獨行的瓜慫

如果是二維陣列就這樣

int a[2][3]=,}

a[m][n]就有m個小{}號 最外面是{}號包起來每個小的{}裡有n個資料,可以部分初始化 也可以全部初始化

在C中怎麼給二維陣列賦值

string其實就是char陣列,讀的時候傳入的只是這個char陣列的首地址.比如 str 256 scanf s str 那麼對於string陣列來說也是一樣 比如你說的 s 10 20 對於這個2維陣列的10個string的首地址就是s 0 s 9 所以讀的時候可以用一個迴圈 for i 0 i...

c 類函式中怎麼返回和使用二維陣列

include using namespace std class foo foo foo foo foo 返回指向二維陣列的指標函式 int foo test2darray unsigned r,unsigned c return arr2d int main cout endl 釋放記憶體 fo...

請問在C語言中,如何將二維陣列的值賦給一維陣列。謝謝

int i,j,a 3 4 b 12 int n 0 for i 0 i 3 i for j 0 j 4 j 就baiok了 給點du辛苦分 zhi吧dao 謝謝專 屬 可以採用兩種 來方式 1 按元素賦自 值 遍歷 bai一維陣列,並將每個元素賦值到二du維陣列的對應元zhi素上。dao 或者遍歷...