Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用指针创建2D数组初始化函数?_C - Fatal编程技术网

C 如何使用指针创建2D数组初始化函数?

C 如何使用指针创建2D数组初始化函数?,c,C,我试图创建一个函数,它接受2d数组的指针以及基于数组大小的整数y和x。我一直在这里出错,希望有人能帮我解决。函数randNum只返回一个从0到9的随机整数 void initialize(int t[], int y, int x){ for(p = &t[0][0]; p <= &t[y-1][x-1]; p++){ *(t + ((y*x) + x)) = randomNum(0,9); } } void初始化(int t[],int y,int x

我试图创建一个函数,它接受2d数组的指针以及基于数组大小的整数y和x。我一直在这里出错,希望有人能帮我解决。函数randNum只返回一个从0到9的随机整数

void initialize(int t[], int y, int x){
  for(p = &t[0][0]; p <= &t[y-1][x-1]; p++){
    *(t + ((y*x) + x)) = randomNum(0,9);
  }
}

void初始化(int t[],int y,int x){
for(p=&t[0][0];p
对于整数数组a,编译器会知道

*(a + k) == a[k]
它需要取a的地址,并将k乘以整数的大小(通常为4字节)

我们需要采取行动

*(a + innerdimension * k + l)
但由于编译器不知道内部维度是什么,因此无法工作

或者,你也可以选择像

void intitialize(int *t, int y, int x){
  for(int i = 0; i < y; i++)
    for (int j = 0; j < x; j++)
      *(t + i * x + j) = randomNum(0,9);
}
void初始化(int*t,int y,int x){
for(int i=0;i

虽然这稍微长一点,但它将准确地描述在给定已知的内部维度x的情况下,如何在二维数组上迭代,同时将不工作的t[i][j]替换为其等价物(t+ix+j)。

为什么不在循环中使用p?同样,我不确定这一点,但不应该[]是一个编译器只希望有一个维度的指针吗?它会知道t[i]=*(t+i*sizeof(int)),但它可能不知道如何计算t[y-1][x-1],因为这里数组中有一个数组。编译器需要知道内部数组的大小为“sizeof”,但它不知道这个值。我在关注Neso Academy(一个youtube频道)'的2d数组打印视频。我希望使用他的概念制作一个数组。虽然你的答案应该可以在纸上完成,但我有很多错误,如下所示。有什么想法吗?main.c:在函数'initialize':main.c:14:3:错误:在'for'之前应该有声明说明符。你能详细说明两个函数中的哪一个失败了吗?在哪里你的意思是“很多错误”,还有更多吗?修复了,丢失了一个“{”是的,就是这样
a[k][l]
*(a + innerdimension * k + l)
void intitialize(int *t, int y, int x){
  for(int i = 0; i < y; i++)
    for (int j = 0; j < x; j++)
      *(t + i * x + j) = randomNum(0,9);
}