Questions tagged «c»

C是用于系统编程(OS和嵌入式),库,游戏和跨平台的通用编程语言。该标记应与ISO 9899标准(除非另有说明,最新版本9899:2018中定义的有关C语言的一般问题)一起使用-还要使用c89,c99,c11等标记特定于版本的请求。C与C ++截然不同,在没有合理理由的情况下,不应将其与C ++标记结合使用。

4
sizeof如何与对数组的指针取消引用一起工作?
在这里,我有一个指向4个整数的ptr数组arr的指针。ptr指向整个数组。ptr[0]或*ptr指向数组的第一个元素,因此加1即可ptr[0]得出数组第二个元素的地址。 我不明白为什么使用sizeof(ptr[0])给出整个数组的大小16个字节,而不是第一个元素的大小4个字节(ptr[0]指向数组中第一个元素)。 int arr[4] = {0, 1, 2, 3}; int (*ptr)[4] = &arr; printf("%zd", sizeof(ptr[0])); //output is 16
9 c  arrays  pointers 

1
Java“ Foo f = new Foo()”中的对象初始化与使用malloc作为C语言中的指针是否基本相同?
我试图了解Java中对象创建背后的实际过程-并且我想使用其他编程语言。 假定Java中的对象初始化与对C中的结构使用malloc相同是错误的吗? 例: Foo f = new Foo(10); typedef struct foo Foo; Foo *f = malloc(sizeof(Foo)); 这就是为什么说对象位于堆而不是堆栈上的原因吗?因为它们本质上只是数据指针?

4
为什么C编译器会优化开关,以及是否有所不同
当我偶然发现一个奇怪的问题时,我正在从事一个个人项目。 在一个非常紧密的循环中,我有一个整数,其值在0到15之间。对于值0、1、8和9,我需要获取-1,对于值4、5、12和13,我需要获取1。 我转向godbolt检查一些选项,并惊讶于编译器似乎无法以与if链相同的方式优化switch语句。 链接在这里:https : //godbolt.org/z/WYVBFl 代码是: const int lookup[16] = {-1, -1, 0, 0, 1, 1, 0, 0, -1, -1, 0, 0, 1, 1, 0, 0}; int a(int num) { return lookup[num & 0xF]; } int b(int num) { num &= 0xF; if (num == 0 || num == …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.