Tag: array

在确定数组的大小时,括号是否有所作为?

以下程序在gcc 4.8.2上两次打印相同的数字: #include int main() { char a[13]; printf(“sizeof a is %zu\n”, sizeof a ); printf(“sizeof(a) is %zu\n”, sizeof(a)); } 根据这个redditpost ,gcc在这方面不符合标准,因为当数组到指针衰减没有发生时,括号表达式不在exception列表中。 这家伙是对的吗? 这是相关的标准报价: 除非它是sizeof运算符或一元&运算符的操作数,或者是用于初始化字符数组数组的字符串文字,或者是用于初始化元素类型与wchar_t兼容的数组的宽字符串文字,具有“数组类型”类型的左值将转换为具有“指向类型的指针”类型的表达式,该类型指向数组对象的初始成员且不是左值。 为了清楚起见,他认为(a)应该触发数组到指针的衰减,因为上面的列表中没有括号括起来( sizeof运算符,一元&运算符,字符串文字作为初始值)。

为什么scanf()需要&运营商(地址)在某些情况下,而不是其他情况?

为什么我们需要在scanf()放置一个&运算符来存储整数数组中的值,而不是将字符串存储在char数组中? int a[5]; for(i=0;i<5;i++) scanf("%d",&a[i]); 但 char s[5]; scanf(“%s”,s); 我们需要传入存储值的地址,因为数组是指向第一个元素的指针。 因此在int / float数组的情况下,它基本上意味着(a+i) 。 但是字符串的情况怎么样?

我应该信任哪个编译器?

这将是一个新手问题,但我试图在C语言(而不是C ++ )的小练习中工作,我遇到了一些问题。 假设我想在一个方法中使用一个数组,该方法的大小取决于其中一个参数: void someFunc(int arSize) { char charArray[arSize]; // DO STUFF … } 当我尝试在Visual Studio 2013中将其编译为.c文件时,我收到一条错误消息,指出不允许使用非常量数组。 但是,相同的代码在GNU编译器下的CodeBlocks中工作。 我应该相信哪一个? 编译器的行为是否正常? 我一直认为,如果你正在做一些编译器不喜欢的事情,你不应该首先做它,因为它不是标准。 任何输入都很有用! 我来自Python背景,我试图更多地参与数据结构和算法的编程。 您可以告诉我的平台是Windows。 如果这个问题需要更多信息才能回答,请告诉我。