加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的基本数组用法?

发布时间:2020-12-16 09:34:08 所属栏目:百科 来源:网络整理
导读:这是你们如何获得ANSI-C99数组的大小?看起来有点像笨笨来自高级语言. int tests[7];for (int i=0; isizeof(tests)/sizeof(int); i++) { tests[i] = rand();} 此分段也出现故障. int r = 10000000;printf ("r: %in",r);int tests[r]; 运行: r: 10000000Seg
这是你们如何获得ANSI-C99数组的大小?看起来有点像笨笨来自高级语言.

int tests[7];
for (int i=0; i<sizeof(tests)/sizeof(int); i++) {
    tests[i] = rand();
}

此分段也出现故障.

int r = 10000000;
printf ("r: %in",r);
int tests[r];

运行:

r: 10000000
Segmentation fault

10000000 seg故障,但1000000工作.

如何从中获得更多信息?我应该检查什么以及如何调试这样的东西? C阵列有限制吗?什么是分段错误?

解决方法

C中的数组不知道它们有多大,所以是的,你必须使用sizeof array / sizeof array [0]技巧来获取数组中的元素数量.

至于段错误问题,我猜你通过尝试分配10000000 * sizeof int字节来超过你的堆栈大小.根据经验,如果您需要超过几百个字节,请使用malloc或calloc动态分配它,而不是尝试创建一个大的自动变量:

int r = 10000000;
int *tests = malloc(sizeof *test * r);

请注意,在大多数情况下,您可以将测试视为数组类型(即,您可以将其下标,可以将其传递给任何需要数组的函数等),但它不是数组类型;它是一个指针类型,因此sizeof tests / sizeof tests [0]技巧将不起作用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读