c++ - 为什么我不能将二维数组作为指针传递,但可以将一维数组作为指针传递
问题描述
显然这段代码有效
void printD(int * ar,int r)
{
for(int i = 0; i < r; i++)
cout<<ar[i]<<endl;
}
int main()
{
int ar[3] = {1,2,3};
printD(ar,3);
return 0;
}
但是这段代码不起作用
void print2D(int ** ar,int r,int c)
{
for( int i = 0; i< r;i++)
for(int j = 0; j < c;j++)
cout<<ar[i][j]<<endl;
}
int main()
{
int ar2[1][2] = {{3,1}};
print2D(ar2,1,2);
return 0;
}
我不明白为什么这不起作用?
解决方案
这个数组int ar2[1][2]
实际上衰减到int(*)[2]
。
没有指向被分配指针的中间指针,有一个连续的 1D 数组可以在 2D 中访问,因此剩余的 [2] 提供了从一行到另一行的跨度。
推荐阅读
- mysql - 从 TableView CheckBox JavaFX 将数据插入数据库
- javascript - 如果使用舍入,有人会面临浮点数的简单算术运算的错误结果吗?
- sql - Oracle 查询条件
- bash - 让 Git 在 Web 主机上使用 VSCode 和文件的问题
- java - 推送到私有 Gitlab 时自动更新 Nexus Repository Manager 上的项目
- android - ViewModel 返回 ArrayList 大小为零
- html - 在闪亮中设置小部件与其标题(文本)之间的距离
- excel - 更新 Excel ListObject 标题名称而不破坏枢轴
- ios - 如何使用 APNs 密钥 (.p8) 为 iOS 应用程序配置推送通知
- r - ggplot 调用更改区域设置 LC_NUMERIC 变量