相关疑难解决方法(0)

从 C 中现有的一维数组创建二维数组?

在 perl 中,我可以创建一维数组,然后从它们创建二维数组,如下所示:

@a1=(a,b,c)
@a2=(d,e,f)
@a3=(g,h,i)
@m23_v1=(\@a1,\@a2,\@a3)
Run Code Online (Sandbox Code Playgroud)

这是另一种方式(假设@a1@a2@a3与前面的示例相同):

@m23_v2=([@a1],[@a2],[@a3])
Run Code Online (Sandbox Code Playgroud)

这两种方式之间的区别在于,当使用反斜杠时,更改$a[0][0]也会更改$a1[0]。另一方面,当使用括号时,值将被复制,因此更改$a[0][0]不会更改$a1[0]。波纹管是变量的内存地址,它们应该阐明我的意思:

print \$a1[0]
SCALAR(0x2006c0a0)

print \$m23_v1[0][0]
SCALAR(0x2006c0a0)

print \$m23_v2[0][0]
SCALAR(0x2030a7e8)
Run Code Online (Sandbox Code Playgroud)

如何在 C 中实现相同的功能?我试过以下代码:

# include <stdio.h>
int main(){
  int a1[3] = {1,2,3};
  int a2[3] = {4,5,6};
  int m23[2][3] = {a1, a2};
  printf("%d\n", a1[0]);
  printf("%d\n", m23[0][0]);
}
Run Code Online (Sandbox Code Playgroud)

但它给了我以下编译警告:

2d.c: In function ‘main’:
2d.c:4:3: warning: initialization makes integer from pointer without a cast [enabled by default]
2d.c:4:3: warning: (near …
Run Code Online (Sandbox Code Playgroud)

c arrays

5
推荐指数
1
解决办法
2281
查看次数

标签 统计

arrays ×1

c ×1