我成功地將值輸入到沒有指標的二維陣列中
int main(){
int A[2][3];
for (int i=0; i<2; i ){
for(int j=0; j<3; j ){
A[i][j] = 2*i 3*j;
cout<<" "<<A[i][j]<<" ";
}
cout<<endl;
}
}
輸出是
0 3 6
2 5 8
然后我嘗試用指標達到相同的結果
int main(){
int A[2][3];
int (*p)[3] = A;
for (int i=0; i<2; i ){
for(int j=0; j<3; j ){
*(*A j)= 2*i 3*j;
cout<<" "<<*(A[i] j)<<" ";
}
cout<<endl;
}
}
輸出是
0 3 6
32758 1 0
知道為什么我對第二個陣列得到不同的結果嗎?
uj5u.com熱心網友回復:
賦值運算式的左運算元
*(*A j)= 2*i 3*j;
不依賴于索引 i。事實上它等價于A[0][j]
因此元素A[1][j]保持未初始化。
而是寫
for (int i=0; i<2; i ){
for(int j=0; j<3; j ){
*( *( A i) j )= 2*i 3*j;
cout<<" "<<*(A[i] j)<<" ";
}
cout<<endl;
}
或者使用宣告的指標p,程式可以如下所示
#include <iostream>
int main()
{
int A[2][3];
int (*p)[3] = A;
for ( int i=0; i < 2; i )
{
for ( int j=0; j<3; j )
{
*( *( p i ) j ) = 2*i 3*j;
std::cout << " " << *(A[i] j) << " ";
}
std::cout << std::endl;
}
}
即運算式*( p i )與 相同,p[i]運算式*( *( p i ) j )與 相同p[i][j]。
uj5u.com熱心網友回復:
您沒有正確使用指標。事實上,你甚至根本沒有使用它。p是指向第一個int[3]in的指標A。您可以使用它上的下標運算子 ( []) 來取消參考它,就像使用A.
#include <iostream>
int main() {
int A[2][3];
int(*p)[3] = A;
for (int i = 0; i < 2; i ) {
for (int j = 0; j < 3; j ) {
p[i][j] = 2 * i 3 * j; // proper dereferencing
std::cout << ' ' << A[i][j] << ' '; // verify via `A`
}
std::cout << '\n';
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/490431.html
