c++ - 为什么我的函数无法使用指针打印多维数组的元素?
问题描述
我有一个 3 X 3 多维数组,我想使用指针打印第 0 行的所有 3 个元素。
这是我写的代码:
#include <iostream>
void print(int *p){
for(int i = 0; i < 3; i++){
std::cout << (*p)[i];
}
};
int main(void){
int arr[3][3] = {
{1,2,3} ,
{4,5,6} ,
{7,8,9}
};
print(arr);
}
这会引发以下错误:
Main.cpp:5:26:错误:下标值不是数组、指针或向量
std::cout << (*p)[i];
~~~~^~
Main.cpp:16:4:错误:没有匹配的函数调用“打印”
print(arr);
^~~~~
Main.cpp:3:6:注意:候选函数不可行:第一个参数没有从 'int [3][3]' 到 'int *' 的已知转换
void print(int *p){
据我了解,arr是指向数组的第一个元素的指针,该元素本身就是一个数组。那么为什么我找不到指针arr返回的值的数组 [i]呢?
解决方案
数组的第一个元素arr
有 type int[3]
。因为所谓的二维数组在语言上就是数组的数组。
因此arr
不能是 的等价物int*
,只能是int[][3]
或的等价物int(*)[3]
。
void print(int p[][3]){
for(int i = 0; i < 3; i++){
std::cout << p[0][i];
}
};
或者
void print(int (*p)[3]){
for(int i = 0; i < 3; i++){
std::cout << (*p)[i];
}
};
将是您的功能的正确签名。任何将多维数组表示为指针的尝试都需要显式转换并将其洗回函数内的正确类型,否则将被视为未定义行为,即使大多数实现都允许这样做。
推荐阅读
- javascript - Javascript - 从字符串数组访问对象的嵌套属性
- java - Selenium 检查 isDisplayed 等于 false 抛出 NoSuchElementException
- sharepoint - 条件公式 SharePoint
- java - 在 Spring 中如何正确配置事务管理器?
- visual-studio - Visual Studio 2019 错误“基本路径参数不完全合格”
- sql - 在 bigquery 中使用 groupby 函数计算 COUNT 的百分比
- react-native - 如何在 Agora React-Native 直播期间应用颜色滤镜
- twitter-bootstrap - .NET Core Bootstrap 中断 BuildBundlerMInifier
- r - 闪亮:尝试更新renderDT中的值时,“数据”必须是二维错误
- python - 如何在图库上的一键recycleview中多次删除?