如何将1D阵列访问为2D阵列
How to access 1D array as 2D array?
我正在尝试将1D数组作为2D数组访问。但它属于Segov。下面是我写的片段。有人能看看这个吗?
void printarray(int **a){
printf("#####2D access... n");
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
printf("## %u-->%d n", &a[i][j],a[i][j]);
}
}
}
int main(){
int a[4] = {10,20,30,40};
printf("%u %u %u n", &a, a, &a[0]);
printf("%u %u %u %u n", &a[0], &a[1], &a[2], &a[3], &a[4]);
printarray((int **)a);
return 0;
}
反之亦然(将2D数组访问为1D数组(的情况只需通过类型转换来处理。下面是片段,这很好。
void printarray(int *a){
printf("#####1D access... n");
for(int i=0;i<4;i++){
printf("## %u-->%d n", &a[i],a[i]);
}
}
int main(){
int a[2][2] = {
{10,20},{30,40}
};
printf("%u %u %u %u n", &a, a, a[0], &a[0]);
printf("%u %u n", a[0], &a[0]);
printf("%u %u n", a[1], &a[1]);
printarray((int *)a);
return 0;
}
谢谢,Hari
您想要使用reinterpret_cast
来获得对存储在数组中的数据的引用:
#include <iostream>
void printarray(int a[2][2])
{
printf("#####2D access... n");
for (int i = 0; i<2; i++)
{
for (int j = 0; j<2; j++)
{
printf("## %p-->%d n", &a[i][j], a[i][j]);
}
}
}
void printarray(int b[4])
{
printf("#####1D access... n");
for (int i = 0; i<4; i++)
{
printf("## %p-->%d n", &b[i], b[i]);
}
}
int main()
{
int a[4] = { 10,20,30,40 };
int(&arr)[2][2] = reinterpret_cast<int(&)[2][2]>(a);
printarray(arr);
int b[2][2] = {{ 10,20 },{ 30,40 }};
int(&brr)[4] = reinterpret_cast<int(&)[4]>(b);
printarray(brr);
return 0;
}
示例:https://ideone.com/thc55R
#####2D access...
## 0x7fff708c4a90-->10
## 0x7fff708c4a94-->20
## 0x7fff708c4a98-->30
## 0x7fff708c4a9c-->40
#####1D access...
## 0x7fff708c4aa0-->10
## 0x7fff708c4aa4-->20
## 0x7fff708c4aa8-->30
## 0x7fff708c4aac-->40
相关文章:
- 回旋/修改阵列访问
- 访问特定阵列位置/索引时出现分段错误
- 如何将1D阵列访问为2D阵列
- 分配/访问2d阵列,使得2d子块是连续的
- 将积分类型的数组作为另一个不相关的积分类型的阵列进行访问的安全且符合标准的方法
- 访问多个阵列时 CPU 缓存的作用是什么?
- OpenMP 环路阵列访问中的错误共享
- 访问字符阵列中不可用的内存位置(超出范围值)
- 将std ::向量转换为阵列和当时的p/调用它会导致访问违规例外,在编组期间mscorlib.dll
- C 使用坐标结构的访问阵列元素
- C 私有阵列访问和存储
- 是二维阵列访问/修改时间组
- 阵列访问期间出现分段错误
- 动态2D阵列访问侵犯剩余
- 为什么2D数组访问要比1D阵列访问更快
- 2D阵列访问元素和地址
- 为什么unordered_set不提供阵列访问运算符
- 哪种方式更适合阵列访问
- 为什么这样做?阵列访问不正常
- 2D阵列访问冲突