引用指向数组的指针数组的值
Referencing values of an array of pointers to arrays
>我正在尝试创建一个包含 8 个其他数组的数组。 我有一个函数将这些数组放在一个更大的数组中。 我在引用子数组中的数据时遇到问题:
void randomGen(int arr[]){
// fill vec10-vec1000000 with random values
arr[0] = *vec10;
arr[1] = *vec100;
arr[2] = *vec1000;
arr[3] = *vec10000;
arr[4] = *vec100000;
arr[5] = *vec100000;
arr[6] = *up;
arr[7] = *down;
}
我正在 main 中对此进行测试,除了每个数组中的第一个值之外,我找不到访问任何内容的方法。 我不确定第一列显示什么,第二列是 vec10-vec1000000 中每个条目中的第一个条目,第三列只是在第一个条目上迭代 +1。如何格式化它以便可以访问我的子数组?我的函数注定要失败吗?
First 4 elements of vec10: 12 5 9 17
0: *(*(&a+i)): 12; *(a+i): 12; *(a)+i: 12
1: *(*(&a+i)): 0; *(a+i): 1144108930; *(a)+i: 13
2: *(*(&a+i)): 0; *(a+i): 984943658; *(a)+i: 14
3: *(*(&a+i)): 0; *(a+i): 1622650073; *(a)+i: 15
4: *(*(&a+i)): 0; *(a+i): 282475249; *(a)+i: 16
5: *(*(&a+i)): 0; *(a+i): 282475249; *(a)+i: 17
6: *(*(&a+i)): 0; *(a+i): 0; *(a)+i: 18
7: *(*(&a+i)): 0; *(a+i): 9999; *(a)+i: 19
8: *(*(&a+i)): 0; *(a+i): 0; *(a)+i: 20
9: *(*(&a+i)): 0; *(a+i): 0; *(a)+i: 21
以下代码片段可以帮助了解有关指针和数组的内容。
// say you have
int a[10], b[10], c[10];
// you can
int *p[3] = {a, b, c}; // implicit conversion from int[10] to int *
// or
int (*pa[3])[10] = {&a, &b, &c};
// which is equivalent to
using Array10 = int[10];
using PointerToArray10 = Array10 *;
PointerToArray10 another_pa[3] = {&a, &b, &c};
// say you have
int d[10], e[11], f[12];
// you can still
int *pp[3] = {d, e, f};
// say you have
void randomGen(int arr[])
// there isn't anything you can do
你需要的是
void randomGen(int *arr[]) {
arr[0] = a; // no deference, the same a as declared before
arr[1] = f;
}
由于那些你想"存储"在arr
中的数组有不同的类型(bound),唯一的选择是存储每个数组的第一个元素的地址,即&a[0]。 因此,Arr
需要具有an array of pointers
类型(此数组的每个元素都是一个指针)。
但是不能将数组声明为函数参数,它们总是会衰减到指针。所以这是交易,你在某处声明一个指针数组:
int *array[10];
然后将其传递给函数
randomGen(array);
该函数使用您传递的数组来初始化指向指针的指针,即int **arr
或int *arr[]
(它们在参数列表中相同),具有数组到指针的转换。而函数参数实际上会指向array
的第一个元素,即&array[0]
.(array[0]
有类型int *
,&array[0]
有类型int **
)
在函数内部,您可以通过指针访问原始数组的元素。
arr[0] // array[0]
相关文章:
- 添加到数组指针
- 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**”