小编Shi*_*hra的帖子

在c中写一个函数指针

我最近在读代码,发现函数指针写成:

int (*fn_pointer ( this_args ))( this_args )
Run Code Online (Sandbox Code Playgroud)

我经常会遇到这样的函数指针:

return_type (*fn_pointer ) (arguments);
Run Code Online (Sandbox Code Playgroud)

这里讨论类似的事情:

// this is a function called functionFactory which receives parameter n
// and returns a pointer to another function which receives two ints
// and it returns another int
int (*functionFactory(int n))(int, int) {
printf("Got parameter %d", n);
int (*functionPtr)(int,int) = &addInt;
return functionPtr;
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我有什么区别,这是如何工作的?

c function-pointers function

5
推荐指数
1
解决办法
242
查看次数

打开文件的不同实现

我正在阅读"高尔文操作系统概念"一书,并遇到以下声明:

文件打开可以通过以下两种方式实现:

  1. 某些系统在第一次引用时打开文件.一旦工作完成,就关闭它们.
  2. 其他一些系统允许应用程序员在应用程序本身中指定诸如open-read/write-close之类的命令."

我看到Linux/Windows的C程序遵循第二种方法.

  • 有第一种方法的例子吗?
  • 为什么这些系统使用第一种方法?

operating-system system-calls

5
推荐指数
1
解决办法
159
查看次数

预处理器#if = = b不支持或错误?

我试图编译这个小代码.但似乎,我看到了错误的结果.任何想法,我哪里错了?

int a=2,b=3;
#if a==b
    printf("\nboth are equal.\n");   
#endif
Run Code Online (Sandbox Code Playgroud)

输出:

两者都是平等的.

c c-preprocessor

1
推荐指数
1
解决办法
826
查看次数

C语言中结构的语法不同

c结构有什么不同的语法?怎么解码这个:

struct p {
    char a[1];
    int b;
    int *a;
    int value;
};
struct p q[] = {
    {"a",      0, &b, C},
    {"J",      0, &k, l}
};
Run Code Online (Sandbox Code Playgroud)

我在这里找到了另一个讨论,但没有遇到这种类型.

c struct

1
推荐指数
1
解决办法
100
查看次数

在单独的.py文件中编写导入模块列表

我有一长串导入模块,如下所示:

import x
import y
.
.
Run Code Online (Sandbox Code Playgroud)

如何在一行中写下这些所有导入?我来自C编程,看到人们在做#include"all_lib.h".有没有相同或更好的pythonic方式这样做?

谢谢.

python import

1
推荐指数
1
解决办法
250
查看次数

malloc()32位机器上的5GB内存

我正在读一本书:

32位机器上进程的虚拟地址空间为2 ^ 32,即4Gb空间.并且程序中看到的每个地址都是虚拟地址.4GB的空间进一步通过用户/内核拆分3-1GB.

为了更好地理解这一点,我做了5Gb空间的malloc()并尝试打印所有地址.如果我打印地址,当应用程序只有3GB的虚拟地址空间时,应用程序如何打印整个5Gb地址?我在这里错过了什么吗?

c linux operating-system linux-kernel

0
推荐指数
1
解决办法
792
查看次数

如何在C中正确设置指向数组的指针数组?

假设我已经定义了这3个数组:

int[][3] arr0 = { 
    {1,2,3}, 
    {4,5,6} 
};

int[][3] arr1 = { 
    {10,20,30}, 
    {40,50,60}, 
    {70,80,90} 
};
int[][3] arr2 = { 
    {100,200,300}, 
    {400,500,600}, 
    {700,800,900}, 
    {1000,1100,1200}
};
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个指向这些数组的指针数组,如:

// pseudo code example
arrays[] = {
    arr0, 
    arr1, 
    arr2
};
Run Code Online (Sandbox Code Playgroud)

因为我想以这种方式从变量"arrayN"的第j个子数组中获取第k个值:

// pseudo code example
int value = arrays[N][j][k];
Run Code Online (Sandbox Code Playgroud)

例如:N为2,j为1且k为0,目标数组为arr2,因此该值应为400.

如何在C中正确编写此代码?我尝试了很多方法而没有工作.

c arrays

-2
推荐指数
1
解决办法
81
查看次数