gpt4 book ai didi

c++ - 如何将一维数组作为二维数组访问?

转载 作者:行者123 更新时间:2023-11-28 01:30:55 24 4
gpt4 key购买 nike

我正在尝试将一维数组作为二维数组进行访问。但它属于Segv。下面是我写的片段。任何人都可以看看这个吗?

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;
}

反之亦然(将二维数组作为一维数组访问)情况仅通过类型转换处理。下面是代码片段,效果很好。

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;
}

谢谢,哈里

最佳答案

您想使用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

关于c++ - 如何将一维数组作为二维数组访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51558741/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com