引數為*&與*的區別以及二維陣列傳遞時列數不對等的區別
一、引數*&與*的區別
開闢空間時的區別:
(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++陣列
- 指標 與 陣列 以及 a 與 &a的區別指標陣列
- 二級指標,二維陣列函式引數傳遞指標陣列函式
- Shell自學二(引數傳遞和陣列)陣列
- 二維陣列作為引數傳遞問題陣列
- 陣列中&a與&a[0]的區別陣列
- 物件陣列與一般陣列的區別物件陣列
- C++動態建立二維陣列,二維陣列指標,以及動態二維陣列函式傳遞C++陣列指標函式
- C#陣列與集合的區別C#陣列
- Java:陣列和集合類作為引數傳遞時的差別(問題解決,謝謝大家提醒)Java陣列
- oracle多列為空與多列不為空的區別小示例Oracle
- 一維陣列a[5]中&a和a區別陣列
- C: (pointer) 陣列變數和指標的區別陣列變數指標
- golang切片和陣列的區別Golang陣列
- javascript陣列和物件的區別JavaScript陣列物件
- C++ 指標陣列與陣列指標的區別C++指標陣列
- jdbctemplate呼叫儲存過程傳遞陣列引數JDBC儲存過程陣列
- 預設引數和關鍵字參數列面上最大的區別是?
- Android中 @和?區別以及?attr/**與@style/**等的區別Android
- java之陣列的索引,排序以及二維陣列Java陣列索引排序
- mongod命令的一些引數以及引數--pidfilepath與mongod.lock區別Go
- 陣列和連結串列的區別陣列
- 命令列CALL程式時傳遞數字引數總結(轉)命令列
- Js傳遞陣列引數到後臺controller的方式JS陣列Controller
- Java後臺接收前端傳遞的陣列物件引數的處理Java前端陣列物件
- 【淺出 PHP】陣列相加和陣列合並的區別PHP陣列
- 從Function.length 與 Argument.length 區別談到如何傳遞任意個數引數Function
- 求陣列長度的兩種方法,以及區別(strlen sizeof)陣列
- PHP 中的陣列相加操作以及與 array_merge 之間的區別PHP陣列
- 彙編眼中的函式呼叫引數傳遞以及全域性與區域性變數與“基址”函式變數
- C#中如何獲取二維陣列的行數和列數?C#陣列
- Java方法04:命令列傳遞引數、可變引數Java命令列
- Proc中使用char陣列、VARCHAR陣列和char變數進行DELETE操作具體行數的細微區別陣列變數delete
- Golang 學習——陣列指標和指標陣列的區別Golang陣列指標
- #define巨集與列舉以及typedef關鍵字的區別
- 面試-陣列和連結串列的區別面試陣列
- JS陣列中(for...in)和(for...of)的區別JS陣列
- 陣列地址與指標之間的區別與聯絡陣列指標