-
這是組合指標和陣列的問題,你必須看看它的這一方面才能弄清楚。 你的 ** 中的 p 指標定義為行指標,它是二級指標位址,它僅通過 p=a 指向陣列的第乙個位址; 這個,如果定義為 int *p; 然後將 p 指標定義為列指標,它是一級指標位址,它通過以下方式指向陣列的第乙個位址:p=*a; p=a[0]; p=&a[0][0];由於不同的指標指向陣列的第乙個位址,因此它們具有不同的表示式來訪問陣列中的元素。
-
*p)[4] 是乙個列數為 4 的二維陣列,可以理解為有乙個 p 的陣列,其中每個元素都是乙個列數為 4 的陣列。
p 是乙個一維陣列。
你的 a 是二維的,所以你必須以這種方式定義它 p=a;
-
測試結果:
2,3a[2,3]=23
請按任意鍵繼續。 .
**:#include ""
#include ""
main()
int (*p)[4],i,j;
p=a;scanf("%d,%d",&i,&j);
system("pause");
注意:不要在 scanf 末尾新增 i=、j= 或類似內容。 只需獲得輸入即可。
-
如果使用編譯。
在程式開頭新增包含""如果您沒有報告錯誤,系統將提示您 a[-858993460,-858993460]=-858993460
這意味著輸入格式不正確,必須以 i=1,j=2 的格式輸入,其中 1,2 可以隨便更改。
-
可能是 win7 或虛擬機器中使用的編譯器工作不正常。
-
沒有錯誤,您將 void main 更改為 int main
-
int a[3][5];3 行 5 列。
二維陣列下標遲早從 0 開始,所以第一行第一列的下標是 [0][0]。
二維姿態陣列 a[j][i] 的元素,其中 j 對應於行並坐標 yi 對應列,對應坐標 x
-
第乙個是 3,因為測試陣列是 3 行;
第二個填充 p[i]+j; p[i] 表示行,p[i]+j 表示列。
-
先確定位置,即確定下標,然後進行輸出。
-
中位數是指所有值中處於中間位置還是最接近平均值的值?
-
void print(int *s){}
傳遞乙個帶有 *s 的二維陣列。 也就是說,二維陣列在水平線上排列,並傳遞陣列的第乙個位址。
要列印元素,只需找到團隊中的元素數量即可。
C 語言,二維陣列在水平線上排列的順序為:
第一行 第一列, 第一行 第二列, 第一行 第三列, 第一行 第四列, 第二行 第一列, 第二行 第二列, 第二行 第三列, 第二行 第四列, 第三行 第一列, 第三行 第二列, 第三行 第三列, 第三行 第四列, a[i,j]:
a[0,0], a[0,1],a[0,2],a[0,3]
a[1,0], a[1,1],a[1,2],a[1,3]
a[2,0], a[2,1],a[2,2],a[2,3]
s[k]:s[0],s[1],s[2],s[3]
s[4],s[5],s[6],s[7]
s[8],s[9],s[10],s[11]
比較表明,對於 1 行中有 4 列的陣列:
k = i * 4 + j
a[i,j] == s[i * 4 + j];
c 在語言語句中,括號是“運算子”,具有以下標識:
x[i] == *(x+i)
S[I * 4 + J] 是簡化為 *(S + I *4 + J) 的恒等式。
那就是你是 a = *(s + j + i*4 )))。
實際上,你寫 a = s[i * 4 + j]; 它也可以理解。
= 函式引數不是 int **s,所以 *(s+i)+j) 不正確。
-
0 水平,1 縱 : 1
請按任意鍵繼續。 .
press any key to continue#include
#include
void print(int a[4],int m, int n);
這是乙個程式,它指定行數和列數,並列印出二維陣列中相應元素的值。 */int main()
print(a,3,4);
system("pause");
return 0;
void print(int a[4],int m, int n)}else }}
在第二個示例中,你把 x 作為 char ** 傳遞,當然不會有警告,在第乙個例子中,你傳遞了 a[2][3] 與 char ** 不匹配,所以編譯器會發出警告,可以忽略它。 如果不想看到警告,請在傳遞引數時強制轉換 (char **a.) >>>More