计算数组的大小

我使用以下宏来计算数组的大小: #define G_N_ELEMENTS(arr) ((sizeof(arr))/(sizeof(arr[0]))) 但是,当我计算函数中数组的大小(计算的值不正确)而不是调用函数的位置(计算的正确值)时,我看到它计算的值存在差异。 代码+输出如下。 任何想法,建议,提示等。 欢迎。 DP #include #define G_N_ELEMENTS(arr) ((sizeof(arr))/(sizeof(arr[0]))) void foo(int * arr) // Also tried foo(int arr[]), foo(int * & arr) // – neither of which worked { printf(“arr : %x\n”, arr); printf (“sizeof arr: %d\n”, G_N_ELEMENTS(arr)); } int main() { int arr[] = {1, 2, 3, 4}; printf(“arr : […]

intptr_t和uintptr_t的字符串格式

intptr_t和uintptr_t的字符串格式是什么,它对32位和64位架构都有效。 编辑 warning: format ‘%x’ expects type ‘unsigned int’, but argument 2 has type “AAA” 这是我在64位但不是32位的警告。 intptr_t AAA

将数组和矩阵传递给函数作为指针和指向C中的指针

给出以下代码: void foo( int* array ) { // … } void bar( int** matrix ) { // … } int main( void ) { int array[ 10 ]; int matrix[ 10 ][ 10 ]; foo( array ); bar( matrix ); return 0; } 我不明白为什么我会收到这个警告: 警告:从不兼容的指针类型传递’bar’的参数1 虽然’foo’电话似乎没问题。 谢谢 :)

为什么这个ctypes代码不能与Python 3.3一起使用,但是可以与Python 2.7一起使用?

所以我正在尝试使用ctypes模块创建一个Python 3.3程序来更改Windows桌面背景。 我在Python 2.7中测试了以下代码,它运行得很好。 但它只适用于Python 3.3! 我正在使用Windows 7.这是代码: import ctypes SPI_SETDESKTOPWALLPAPER=20 ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKTOPWALLPAPER, 0,”C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg”, 3)

case-switch的工作方式是这样的吗?

我今天遇到了一个代码转换代码,看到它是如何工作的,有点惊讶。 代码是: switch (blah) { case a: break; case b: break; case c: case d: case e: { /* code here */ } break; default : return; } 令我惊讶的是,在变量为c的情况下,路径进入了“此处代码”段。 我同意在案例开关的c部分结束时没有中断,但我会想象它会通过default 。 当你降落在一个case blah:行,是不是检查你当前的值是否与特定情况相符, 然后只让你进入特定的段? 否则案件的重点是什么?

如何在C中输入指向char的指针数组?

假设我在C中有一个指向char的指针数组: char *data[5] = { “boda”, “cydo”, “washington”, “dc”, “obama” }; 我希望使用qsort对这个数组进行排序: qsort(data, 5, sizeof(char *), compare_function); 我无法想出比较function。 出于某种原因,这不起作用: int compare_function(const void *name1, const void *name2) { const char *name1_ = (const char *)name1; const char *name2_ = (const char *)name2; return strcmp(name1_, name2_); } 我做了很多搜索,发现我必须在qsort里面使用** : int compare_function(const void *name1, const void *name2) { […]

‘asm’,’__ asm’和’__asm__’有什么区别?

据我所知, __asm { … };之间的唯一区别__asm { … }; 和__asm__(“…”); 是第一个使用mov eax, var ,第二个使用movl %0, %%eax使用:”=r” (var) 。 还有什么其他差异? 那么asm呢?

如何在C中关闭stdout的缓冲

我想关闭stdout的缓冲,以获得以下代码的确切结果 while(1) { printf(“.”); sleep(1); } 代码printf一堆’。’ 只有当缓冲区被填满时

C ++是否包含整个C语言?

我在教程中读到C ++包含整个C编程语言。 不过我也读过这样的地方 如果您学习C ++,您最终将学习大部分C语言,并且随着时间的推移,您将学习一些语言之间的差异。 所以我的问题只有这个: 如果我非常了解C ++,我最终会学习“真正的”C语言(没有任何“差异”),因为完整的C90语言包含在C ++ 11中吗?

什么是函数指针,我将如何使用它们?

我知道我可以使用指针来实现function。 有人可以解释为什么会使用它们,以及如何使用它们? 简短的示例代码对我很有帮助。