Tag: 类型

解释int(* a)

当使用C中的数组和指针时,人们会很快发现它们并不等同,尽管乍一看似乎是这样。 我知道L值和R值的差异。 不过,最近我试图找出一个可以与二维数组结合使用的指针类型,即 int foo[2][3]; int (*a)[3] = foo; 但是,我不知道编译器如何“理解”a的类型定义,尽管*和[]的常规运算符优先级规则。 相反,如果我使用typedef,问题会变得非常简单: int foo[2][3]; typedef int my_t[3]; my_t *a = foo; 在底线,有人可以回答我关于编译器如何读取术语int (*a)[3]的问题吗? int a[3]很简单, int *a[3]也很简单。 但那么,为什么它不是int *(a[3]) ? 编辑:当然,而不是“类型转换”我的意思是“typedef”(它只是一个错字)。

fgetc无法识别EOF

下面的程序在各种Solaris / Linux版本上运行良好,但在AIX上运行不正常。 但是,如果我在AIX上用while(c!=0xff)替换while(c!=EOF)它运行完全正常。 有什么想法吗? 我检查了AIX上的fgetc手册页,它应该返回EOF常量! #include #include #include int main() { char c; FILE *fp; fp = fopen(“a.txt”, “r”); c=fgetc(fp); while(c!=EOF) { c=fgetc(fp); printf(“%d”,c); } fclose(fp); return 0; }

“长期无符号”在C中是否与“unsigned long”一样有效?

最近有一个问题是关于ULL或LLU是否有效用于指定C中的无符号长long常量。我知道它们都是有效的但我认为ULL会更好,因为它匹配unsigned long long类型。 但是,我现在不太确定。 gcc编译器允许以下内容无怨言: int main(void) { unsigned int a = 1; int unsigned b = 2; return 0; } 所以我的问题是: int unsigned ,还有其他变体,比如标准的long long unsigned有效类型?

根据AMD64 ABI,什么样的C11数据类型是arrays

我正在研究在OSX上使用的x86_64的调用约定,并且在System V x86-64 ABI标准中阅读了名为“Aggregates and Unions”的部分。 它提到了数组,我认为这就像一个固定长度的c数组,例如int[5] 。 我下到“3.2.3参数传递”来读取数组是如何传递的,如果我理解正确的话,像uint8_t[3]这样的东西应该在寄存器中传递,因为它小于规则1规定的4个8字节的限制。聚合类型的分类(第18页靠近底部)。 编译后,我看到它被作为指针传递。 (我正在使用OSX 10.11.6上的Xcode 7.3.1中的clang-703.0.31进行编译)。 我用来编译的示例源如下: #include #define type char extern void doit(const type[3]); extern void doitt(const type[5]); extern void doittt(const type[16]); extern void doitttt(const type[32]); extern void doittttt(const type[40]); int main(int argc, const char *argv[]) { const char a[3] = { 1, 2, 3 }; const […]

如何在C中检查输入是否为数字?

在C的主要function: void main(int argc, char **argv) { // do something here } 在命令行中,我们将输入任何数字,例如1或2作为输入,但它将被视为argv参数的char数组,但如果输入是一个数字,以防人们键入hello或c ?

C ++的精确十进制数据类型?

PHP有一个十进制类型,它没有浮点数和双精度的“不准确性”,因此2.5 + 2.5 = 5而不是4.999999999978325或类似的东西。 所以我想知道C或C ++是否有这样的数据类型实现?

除了char之外,为什么sizeof内置类型在C&C ++中依赖于编译器?

为什么C和C ++中的基本类型没有像Java那样严格定义,其中int总是4个字节, long是8个字节等等。据我所知,在C和C ++中,只有一个char被定义为1个字节,其他所有内容都被定义为不同由不同的编译器。 所以C和C ++中的int不一定必须是4个字节,只要它比short而short就是更长的char 。 我只是想知道为什么会这样,它是否有用?

如何在C程序中使用MATLAB Coder codegen创建的C库和emxArray参数?

由codegen创建的C函数(C静态库)采用类型为const emxArray_uint32_T的输入参数,并返回类型为emxArray_struct_T的值。 正如类型所示,input是一个uint32数组,output是一个struct数组。 我不确定如何在我的C程序中使用此function。 对于输入,我应该声明类型为uint32_T的数组还是使用类型emxArray_uint32_T ? 对于输出,因为我不知道输出数组的大小,如何声明struct的数组从函数接收返回值? 我把问题放在MATLAB的答案中,但没有运气.. 谢谢!