指针和数组
pointers and arrays
为什么指针数组"等价"在以下情况下不起作用?
void foo(int** x) {
cout << x[0][1];
}
int main( ) {
int a[2][2] = {{1,2},{2,3}};
foo(a);
}
谢谢
int
** 和 int[2][2] 的内存模型是不同的。
int a[2][2]
存储在内存中
&a : a[0][0]
&a + 4 : a[0][1]
&a + 8 : a[1][0]
&a + 12: a[1][1]
int** x
:
&x : addr1
&x + 4 : addr2
addr1 : x[0][0]
addr1 + 4: x[0][1]
addr2 : x[1][0]
addr2 + 4: x[1][1]
而addr1
和addr2
只是内存中的地址。
您只是无法将一个转换为另一个。
它不起作用,因为只有多维数组的第一级衰减到指针。试试这个:
#include <iostream>
using std::cout;
void foo(int (*x)[2]) {
cout << x[0][1];
}
int main( ) {
int a[2][2] = {{1,2},{2,3}};
foo(a);
}
因为类型不是 int **。
foo(int *[2]);
指针 A 的类型不是 int **,确切地说是 int* [2]。
相关文章:
- 添加到数组指针
- C++语法差异:二维和一维数组(指针算术)
- 数组指针表示法C++(移动数组时)
- 复制后删除原始数组指针将前 3 个字节设置为 0
- C++访问指向结构的指针中的类数组指针
- C++编译时使用 constexpr 字符数组指针分配静态数组?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 创建<int>对整数数组指针的矢量引用 (C++)
- 将 2D 数组指针传递给 C++ 中的函数
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 队列数组指针 (C++)
- C++数组指针上的删除操作
- 对于循环不循环和检测字符数组 [指针和字符数组]
- 如何初始化数组指针对象
- 如何正确传递 2D 数组指针作为参数
- 从数组指针中获取怪异的数字
- 初始化std :: unique_ptr作为原始数组指针的初始化
- 将结构数组指针从C#传递到C
- STD :: Sort将数组指针设置为NULL
- C++数组指针错误无法将“int*”转换为“int**”