gpt4 book ai didi

c - 带指针的二维数组

转载 作者:行者123 更新时间:2023-11-30 21:47:41 25 4
gpt4 key购买 nike

所以到目前为止我有以下代码:

#include <stdio.h>

int foo (int *pointer, int row, int col);

int main() {
int array[3][3] ={ {1,2,3},{4,5,6},{7,8,9}};

int *pointer= array[0];

int row = 2;
int col = 2;

int answer = foo (pointer, row, col);

printf("%d", answer); //prints 5 (which is wrong)
printf("%d", array[2][2]); //prints 9
}

int foo (int *pointer, int row, int col){ //I don't want to use any square brackets here, unless I really have to.
int value;
value = *((int *)(pointer+row)+col);

return value;
}

所以我的主要问题是传递 2D 指针,请详细解释,因为我在编码方面还是新手。我不想真正改变我传递的内容(就像我想使用 foo(pointer, row, col) 中的指针而不是 foo (array, row, col) 中的指针。

最佳答案

passing a 2D pointer

从您(滥用)使用术语的方式来看,很明显您错误地认为指针和数组是相同的。 They aren't.

如果要使用指针访问多维数组,则必须指定其所有维度(除了第一个、最里面的维度)并正确使用指针算术,可能使用指向数组的指针,因为多维数组是连续的内存中:

const size_t h = 2;
const size_t w = 3;
int arr[h][w] = {
{ 1, 2, 3 },
{ 4, 5, 6 }
};

int *p = &arr[1][2];
int *q = arr[1];
int (*t)[3] = &arr[1];
printf("arr[1][2] == %d == %d == %d\n", *p, q[2], (*t)[2]);

return 0;

关于c - 带指针的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16539030/

25 4 0
文章推荐: c - C 中的数组错误
文章推荐: C 编译错误
文章推荐: c - 在 C 中使用 goto 关键字
文章推荐: C程序只有两个循环
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com