sizeof(数组)如何在运行时工作?

我已经读过C中的sizeof运算符在编译时被解释,因为在编译时编译器知道数组大小及其类型,sizeof能够计算array占用的字节数。但是sizeof如何处理以下代码: #include #include int main() { int n; scanf(“%d”,&n); int a[n]; int s=sizeof(a); printf(“%d”,s); return 0; } 这里的数组大小在编译时是不知道的,那么它是如何正常工作的?

C中的头文件有什么意义?

可能重复: [C]每个源文件的标头。 在C ++中为什么有头文件和cpp文件? C ++ – 什么应该进入.h文件? C中存在头文件的唯一原因是开发人员可以快速查看哪些函数可用,以及它们可以采用哪些参数? 或者它与编译器有关? 为什么没有其他语言使用此方法? 它只是我,还是看起来有两套function定义只会导致更多的维护和更多的错误空间? 或者知道头文件只是每个C开发人员必须知道的东西?

在C中解析CSV文件

是否有一个库可用于解析C中的CSV文件。我在Linux系统上。 我知道这个,但它是在C ++中,我需要在C中的东西。如果有人已经完成它,不想经历调试和测试的痛苦。

寄存器变量的地址

在C中,我们不能使用&来查找寄存器变量的地址,但在C ++中我们也可以这样做。 为什么它在C ++中合法而在C中不合法? 有人可以深入解释这个概念。

我应该信任哪个编译器?

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

结构初始化C / C ++编程语言?

我可以使用代码进行struct初始化: struct struct_type_id struct_name_id = { value1, value2, value3 }; 但不能用: struct struct_type_id struct_name_id; struct_name_id = { value1, value2, value3 }; 为什么我能用前者做到这一点,但后者不能用gcc,g ++,vc2008,vc6?换句话说,为什么c / c ++编程语言不支持这种语法? 谢谢。

传入_Generic宏的不兼容的指针类型

以下代码生成2个警告,这些警告在问题标题中描述。 #include static void _print_f(float *f){printf(“float : %f\n”, *f);} static void _print_i(int *i) {printf(“int : %d\n”, *i);} #define print(num) _Generic((num), \ int* : _print_i(num), \ float* : _print_f(num)) int main(void) { print((&(int){10})); print((&(float){10.f})); return 0; } OUTPUT: int : 10 float : 10.000000 我知道,这个宏可以写成如下: #define print(num) _Generic((num), \ int* : _print_i, \ float* : _print_f)(num) […]

使用SetParent将HWND嵌入到外部进程中

我正在尝试使用SetParent函数将我的进程中的窗口嵌入到外部进程的窗口中,并且遇到了一些我希望有人可以帮助我的问题。 首先,这里是我正在做的将窗口嵌入到应用程序中的概述: HWND myWindow; //Handle to my application window HWND externalWindow; //Handle to external application window SetParent(myWindow,externalWindow); //Remove WS_POPUP style and add WS_CHILD style DWORD style = GetWindowLong(myWindow,GWL_STYLE); style = style & ~(WS_POPUP); style = style | WS_CHILD; SetWindowLong(myWindow,GWL_STYLE,style); 此代码有效,我的窗口出现在其他应用程序中,但引入了以下问题: 当我的窗口获得输入焦点时,外部进程的主应用程序窗口失去焦点(即标题栏改变颜色) 当我的窗口具有焦点时,主应用程序的键盘快捷键命令不起作用 有人知道解决方法吗? 我希望我的窗口被视为主应用程序的另一个子窗口。

malloc实现?

我正在尝试为C实现malloc和free ,我不知道如何重用内存。 我目前有一个如下所示的struct : typedef struct _mem_dictionary { void *addr; size_t size; int freed; } mem_dictionary; 我的malloc看起来像这样: void *malloc(size_t size) { void *return_ptr = sbrk(size); if (dictionary == NULL) dictionary = sbrk(1024 * sizeof(mem_dictionary)); dictionary[dictionary_ct].addr = return_ptr; dictionary[dictionary_ct].size = size; dictionary[dictionary_ct].freed = 1; dictionary_ct++; return return_ptr; } 当我释放内存时,我只会将地址标记为0 (这表示它是免费的)。 在我的malloc ,我会使用for循环来查找数组中的任何值等于0 ,然后将内存分配给该地址。 我有点困惑如何实现这一点。

通过malloc进行VLA和动态内存分配有什么区别?

我很好奇这个: 有什么不同之处: const int MAX_BUF = 1000; char* Buffer = malloc(MAX_BUF); 和: char Buffer[MAX_BUF];