使用指针向2D数组插入值



我成功地将值输入到一个没有指针的二维数组

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

知道为什么我得到了第二个数组的不同结果吗?

赋值表达式的左操作数

*(*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]相同。

您没有正确使用指针。事实上,你根本就没有使用它。p是指向A中第一个int[3]的指针。您可以使用下标操作符([])对其解引用,就像您对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';
}
}

相关内容

  • 没有找到相关文章

最新更新