c++ - 指向二维数组的指针(为什么有效)

标签 c++ arrays pointers multidimensional-array

我有以下功能(我想打印给定行中的所有元素)

void print_row(int j, int row_dimension, int *p)
{   
p = p + (j * row_dimension);

for(int i = 0; i< row_dimension; i++)
    cout<<*(p+i)<< " ";
}

创建数组

int j[3][3]={{1,2,3},
             {4,5,6},
             {7,8,9} };

我不明白的是为什么我可以用下面的方式调用函数:

print_row(i, 3, *j);

为什么我可以将“*j”作为参数?不应该传递地址吗?为什么可以使用间接运算符?

最佳答案

int j[3][3] = 
{{1,2,3},
{4,5,6},
{7,8,9}}; // 2d array

auto t1 = j; // int (*t1)[3]
auto t2 = *j; // int *t2

所以发生的事情是 *j 产生 j[0],这是一个 int[3] 然后衰减到一个int*.

关于c++ - 指向二维数组的指针(为什么有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41021866/

相关文章:

python - 如何在 numpy 中将一个数组除以另一个数组元素?

java - 返回类似数组的所有子序列,在 Java 中只有连续的值

c++ - 错误 C2065 : 'MIIM_STRING' : undeclared identifier

c++ - 如何在代码中使用eclipse项目变量

c++ - 是否有不需要包含标准库的 C/C++ 编译器?

c - 推送操作中对数组的堆栈操作错误

c - 尝试从列表中删除节点时出现段错误?

c++ - 检查函数指针类型

actionscript-3 - as3函数指针

c++ - 是否使用 if (0) 跳过应该工作的开关中的案例?