引數為*&與*的區別以及二維陣列傳遞時列數不對等的區別
一、引數*&與*的區別
開闢空間時的區別:
(1)引數為*&address
typedef struct Anode{
int weight;
struct Anode *next;
}ANode;
void createAddress(Anode *&address){
address = (Anode *)malloc(sizeof(ANode));
}
int main(){
Anode *address;
createAddress(address);
return 0;
}
此時不會報錯
(2)引數為*address
typedef struct Anode{
int weight;
struct Anode *next;
}ANode;
void createAddress(Anode *address){
address = (Anode *)malloc(sizeof(ANode));
}
int main(){
Anode *address;
createAddress(address);
return 0;
}
此時報錯:指標address沒有初始化。
總結
由於*&address取了address的地址,因此在void函式裡開闢空間,相當於為主函式裡的address開闢了空間,在void函式回收時不會被銷燬;相反,*address因為沒有取到address,因此在void函式回收時會被銷燬,因此報錯。
二、二維陣列傳遞時列數不對等的區別
(1)傳遞二維陣列的列數和引數中二維陣列的列數相等時
#include <stdio.h>
void printA(int A[][3]){
int i, j;
printf("----------\n");
for(i = 0 ; i < 6 ; i++){
for(j = 0; j < 3 ; j++){
printf("%d ", A[i][j]);
}
printf("\n");
}
}
int main(){
int num[6][3];
int i, j;
for(i = 0 ; i < 6 ; i++){
for(j = 0; j < 3 ; j++){
scanf("%d", &num[i][j]);
}
}
printA(num);
return 0;
}
此時的值與輸入的值一一對應。
(2)傳遞二維陣列的列數和引數中二維陣列的列數不相等時
#include <stdio.h>
void printA(int A[][4]){
int i, j;
printf("----------\n");
for(i = 0 ; i < 6 ; i++){
for(j = 0; j < 3 ; j++){
printf("%d ", A[i][j]);
}
printf("\n");
}
}
int main(){
int num[6][3];
int i, j;
for(i = 0 ; i < 6 ; i++){
for(j = 0; j < 3 ; j++){
scanf("%d", &num[i][j]);
}
}
printA(num);
return 0;
}
此時有些軟體會報錯,有些軟體會警告(可以執行,但是相應的值不對等,這裡具體體現為A與num對應的值不相等)
總結
此時由於二維陣列A的列數為4,二維陣列num的列數為3,列數不相等,有的軟體會提示兩者不相容,而有的軟體會警告:[Warning] passing argument 2 of ’ printA ’ from incompatible pointer type [enabled by default],可以執行,但是二維陣列num與A的值不會一一對應。
小提示:Courier New字型是word裡面最接近寫程式碼的字型,裡面的符號容易區分中英文。
相關文章
- c++ -- 二維陣列引數傳遞C++陣列
- 二級指標,二維陣列函式引數傳遞指標陣列函式
- Shell自學二(引數傳遞和陣列)陣列
- 物件陣列與一般陣列的區別物件陣列
- 二維陣列作為引數傳遞問題陣列
- C#陣列與集合的區別C#陣列
- 一維陣列a[5]中&a和a區別陣列
- Js傳遞陣列引數到後臺controller的方式JS陣列Controller
- golang切片和陣列的區別Golang陣列
- mongod命令的一些引數以及引數--pidfilepath與mongod.lock區別Go
- PHP 中的陣列相加操作以及與 array_merge 之間的區別PHP陣列
- 預設引數和關鍵字參數列面上最大的區別是?
- 【淺出 PHP】陣列相加和陣列合並的區別PHP陣列
- 求陣列長度的兩種方法,以及區別(strlen sizeof)陣列
- Java後臺接收前端傳遞的陣列物件引數的處理Java前端陣列物件
- 從Function.length 與 Argument.length 區別談到如何傳遞任意個數引數Function
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- #define巨集與列舉以及typedef關鍵字的區別
- JS陣列中(for...in)和(for...of)的區別JS陣列
- 彙編眼中的函式呼叫引數傳遞以及全域性與區域性變數與“基址”函式變數
- 陣列地址與指標之間的區別與聯絡陣列指標
- 自增長列和序列的區別(identity與sequence的區別)IDE
- Day18--命令列傳遞引數命令列
- C#中如何獲取二維陣列的行數和列數?C#陣列
- Java方法04:命令列傳遞引數、可變引數Java命令列
- 面試-陣列和連結串列的區別面試陣列
- PHP中二維陣列與多維陣列PHP陣列
- 128 PHP合併陣列+與array_merge的區別分析PHP陣列
- subprocess中命令為引數序列和字串的區別字串
- 找一個陣列中特別的數陣列
- C語言可變引數以及printf()、sprintf()、vsprintf() 的區別與聯絡C語言
- 等冪和最少項陣列的對稱與不對稱陣列
- Go高階特性 13 | 引數傳遞:值、引用及指標之間的區別?Go指標
- 詳解資料結構中的“陣列”與程式語言中的“陣列”的區別和聯絡資料結構陣列
- 求區間不同數的個數【樹狀陣列求解】陣列
- JavaSE 陣列:一維陣列&二維陣列Java陣列
- 變數宣告帶var與不帶var的區別變數
- 字串指標與字元陣列的區別--字串常量的值不能改字串指標字元陣列