c - 可变大小的二维数组声明错误吗?
问题描述
这是main.c:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int size = atoi(argv[1]);
int int_array[10][10];
int *before = NULL;
int *val[size];
int *after = NULL;
printf("before:%p, after:%p, sizeof val:%lu\n", before, after, sizeof val);
int i = 0;
/*for (; i < 10; i++) {
val[i] = int_array[i];
}*/
val[0] = int_array[0];
val[1] = int_array[3];
printf("int_array:%p, int_array[0]:%p, int_array[1]:%p, int_array[2]:%p, int_array[3]:%p\n", int_array, int_array[0], int_array[1], int_array[2], int_array[3]);
printf("val:%p, val[0]:%p, val[1]:%p, val[2]:%p, val[3]:%p\n", val, val[0], val[1], val[2], val[3]);
printf("before:%p, after:%p\n", before, after);
return 0;
}
[root@localhost test]# ./test 3
before:(nil), after:(nil), sizeof val:24
int_array:0x7ffeadc69470, int_array[0]:0x7ffeadc69470, int_array[1]:0x7ffeadc69498, int_array[2]:0x7ffeadc694c0, int_array[3]:0x7ffeadc694e8
val:0x7ffeadc69440, val[0]:0x7ffeadc69470, val[1]:0x7ffeadc694e8, val[2]:0x3, val[3]:0x4005ba
before:(nil), after:(nil)
[root@localhost test]# ./test 6
before:(nil), after:(nil), sizeof val:48
int_array:0x7ffcd30f1f50, int_array[0]:0x7ffcd30f1f50, int_array[1]:0x7ffcd30f1f78, int_array[2]:0x7ffcd30f1fa0, int_array[3]:0x7ffcd30f1fc8
val:0x7ffcd30f1f00, val[0]:0x7ffcd30f1f50, val[1]:0x7ffcd30f1fc8, val[2]:0x7ffcd30f2220, val[3]:(nil)
before:(nil), after:(nil)
编译代码:gcc -o test main.c,然后我通过./test 3和./test 6得到上面的输出。所以,sizeof()
确定的不是编译时间而是运行时间?
解决方案
可变大小的二维数组声明错误吗?</p>
在 C++ 中,所有数组变量的大小必须是编译时常量。size
不是编译时间常数,因此int *val[size];
在 C++ 中格式不正确。
推荐阅读
- azure - 将用户添加到 azure devops 项目
- assembly - 自定义 setjmp/longjmp 实现分段错误
- c# - 未选择任何内容时将默认值保存在组合框中c#
- javascript - 我无法访问我使用 ngFor 循环创建的 DOM 元素,并且我正在从服务中获取数据。角
- mysql - 获取时间需要时间
- c - 我对c中的链表有一个简单的问题
- javascript - 使用 webview javascript 在 android 中下载 facebook 视频
- python - 在 Python Pandas 中基于 DataFrame 中的日期计算困难的周数?
- conda - conda:“找不到命令”错误但包存在?
- swift - MacCatalyst 上的核心数据 CloudKit 同步问题