[英]How to remove error in 2-d array declaration using pointers?
如果我將二維數組聲明為
#include <stdio.h>
#include <stdlib.h>
int main() { int c=5;int r=6;
int **a=(int **) malloc (c*sizeof(int *));
int i,j;
for (i=0;i<c;i++){
*(a+i)=(int *) malloc (r*sizeof (int));
}
}
上述程序成功運行。
#include <stdio.h>
#include <stdlib.h>
int main() { int c=5;int r=6;
int **a;
**a=(int **) malloc (c*sizeof (int *));
int i,j;
for (i=0;i<c;i++){
*(a+i)=(int *) malloc (r*sizeof (int));
}
}
但是編譯器在上述程序中顯示錯誤。
為什么這樣? 任何幫助將不勝感激。
您聲明了一個未初始化且具有不確定值的int **
類型的指針。
int **a;
然后在下一條語句中,您將取消引用指針兩次
**a=(int **) malloc (c*sizeof (int *));
表達式**a
具有int
類型,而右側表達式具有int **
類型。
因此編譯器發出一條消息,指出操作數具有不同的類型。
此外,如果將運行這樣的程序,則取消引用未初始化的指針會導致未定義的行為。
你至少應該寫
a=(int **) malloc (c*sizeof (int *));
請注意,如果在第一個程序中,變量r
表示行,變量c
表示列,那么您應該按行分配 arrays,程序應該看起來像
#include <stdio.h>
#include <stdlib.h>
int main() { int c=5;int r=6;
int **a=(int **) malloc (r*sizeof(int *));
int i;
for (i=0;i<r;i++){
*(a+i)=(int *) malloc (c*sizeof (int));
}
}
否則,表達式a[i]
將產生一列而不是一行。
如上所示分配 arrays 后,表達式**a
等效於表達式a[0][0]
並將產生存儲在第一行第一列中的int
類型的 object。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.