指標陣列的初始化方式和和用二維陣列做形參

2021-07-02 00:32:51 字數 1152 閱讀 3406

定義乙個int型指標d,指向乙個陣列,我用memset(d,0,sizof(d) )來初始化卻發現總是出錯。後來才發現大牛們都是這樣初始化的

int *dp = new int[c+1];

memset(dp,0,(c+1)*sizeof(int));

memset(dp,0,(c+1)*4);

上面這兩種初始化方式都對。

c++中用二維陣列傳參時形參該怎樣寫 ?

二維陣列的儲存方式是和一維陣列沒什麼區別,但是用二維陣列做引數,它的形參該怎樣寫?要注意的是:函式中的形參其實就相當於乙個宣告,並不產生記憶體分配,形參的目的就是要讓編譯器知道函式引數的資料型別。

正確的是:

void func(int array[3][10]);

void func(int array[10]); 可以省略第一維的大小,

錯誤的是:

void func(int array).這樣的用法只能在初始化時可以用;

這樣寫也是錯誤:

void func(const int m,const int n,int array[m][n]);

或 void func(int m,int n,int array[m][n]);

大家都知道陣列的索引必須是個常量表示式,void func(const int m,const int n,int array[m][n]);如果const int m沒有初始化,那麼系統將m或n自動初始化為0,所以這樣些是不對的.

如果我們採用這樣:

void func(int **array, int m, int n) ,

那麼在實際的函式呼叫是,我們就要進行強制轉換才可以用,我們可以這樣呼叫void func((int **)array, int m, int n);在函式呼叫時,要把陣列形式寫成指標形式如*((int*)array + n*i + j);直接寫int array[i][j]會導致錯誤,編譯可以通過,在vc編譯器中執行會出現異常,dev編譯器會出現乙個隨機值,原因就在於如果寫成int array[i][j],編譯器無法正確的定址,當然各種編譯器對它的處理結果是不一樣的。如果我們的形參是陣列,那麼我們在函式體中可以用指標也可以用 陣列形式,但是如果我們形引數中用的是指標,最好也用指標,有時用陣列形式會出錯,二維陣列就是這樣。

***

動態開闢二維陣列,初始化二維陣列指標

動態開闢二維陣列主要有兩種方法 1 用new在堆上開闢 2 用vector開闢。比如用new開闢 int output new int row for int i 0 i 用delete銷毀記憶體空間,一定要記得 for i 0 i row i delete output output null 比...

二維陣列的初始化

1.使用兩個for迴圈定義 for i 1 i n i 2.定義時初始化 int a n m 3.使用函式定義 memset 作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法 memset函式對陣列只能用於置零 0 或置負一 1 操作 include voi...

二維陣列的初始化

1.不分行的初始化,所有陣列元素放在一對 內 1 全部元素初始化 a 2 3 2 部分元素初始化 a 2 3 未初始化的元素預設為0,即a 1 1 0,a 1 2 0。3 省略一維長度下標時的初始化 行下標 a 3 陣列元素個數除以列數,正好除盡,所得的商就是行數。a 3 陣列元素個數除以列數,除不...