小编dri*_*ker的帖子

函数指针是否使程序变慢?

我在C中读到了函数指针.每个人都说这将使我的程序运行缓慢.这是真的吗?

我制作了一个程序来检查它.我在两个案例中得到了相同的结果.(衡量时间.)

那么,使用函数指针是不是很糟糕?提前致谢.

为了回应一些人.在循环中我比较的时候我说"运行缓慢".像这样:

int end = 1000;
int i = 0;

while (i < end) {
 fp = func;
 fp ();
}
Run Code Online (Sandbox Code Playgroud)

执行此操作时,如果执行此操作,我会得到相同的时间.

while (i < end) {
 func ();
}
Run Code Online (Sandbox Code Playgroud)

所以我认为函数指针没有时间差异,也没有像许多人所说的那样使程序运行缓慢.

c pointers function-pointers

52
推荐指数
7
解决办法
2万
查看次数

C复合文字,指向数组的指针

我正在尝试将复合文字分配给变量,但似乎不起作用,请参阅:

  int *p[] = (int *[]) {{1,2,3},{4,5,6}};
Run Code Online (Sandbox Code Playgroud)

我在gcc中遇到错误.

但如果我只写这个:

  int p[] = (int []) {1,2,3,4,5,6};
Run Code Online (Sandbox Code Playgroud)

那没关系.

但这不是我想要的.

我不明白为什么错误发生,因为如果我像数组一样初始化它,或者使用字符数组的指针,它没关系,请参阅:

  int *p[] = (int *[]) {{1,2,3},{4,5,6}}; //I got a error
  int p[][3] = {{1,2,3},{4,5,6}}; //it's okay
  char *p[] = (char *[]) {"one", "two"...}; // it's okay!
Run Code Online (Sandbox Code Playgroud)

注意我不明白为什么我在第一个错误中得到错误,请我不能,或者我不想写第二个表单,因为它需要是复合文字,我不想要说数组到编译器有多大.我想要第二个,但是对于int值.

提前致谢.

c compound-literals

31
推荐指数
3
解决办法
2万
查看次数

有没有办法在C中循环使用不同类型元素的结构?

我的结构是这样的

typedef struct {
  type1 thing;
  type2 thing2;
  ...
  typeN thingN;
} my_struct 
Run Code Online (Sandbox Code Playgroud)

如何在循环中枚举struct childrens,例如while,或for?

c struct loops

20
推荐指数
1
解决办法
3万
查看次数

为什么编写可移植的C程序很困难?

我想知道,为什么在没有包含胶水代码的情况下让程序在许多操作系统(如Windows和Linux)中运行太难了.它们都共享相同的架构(x86),所以我认为它应该很简单.此外,C是标准化的,那么为什么这些操作系统的实现不同?为什么难以遵循标准并为所有操作系统实现通用库?

我用C编程了将近两年,目前我使用glib来实现可移植性.

我不是在寻找这个问题的解决方案,我已经为此目的使用了glib.但是我想知道为什么它是必要的,为什么制造一个没有差异的C库是很困难的.

[加]

例如,当我在C/Glib中编写程序时,我使用gchar/gint等类型确实是C基元类型,在wikipedia中关于glib,它说:

"特征

在基本层面上,GLib提供了类型定义,取代了C原型char,int,float等,以提高可移植性"

为什么C原始类型不可移植和整个语言?

感谢所有的答案.

c cross-platform

15
推荐指数
4
解决办法
5507
查看次数

C中的变量参数,如何获取泛型类型的值?

我正在尝试使用带有泛型类型的C stdarg.h lib.int类型,是我的泛型类型>要理解它,请继续阅读.所以,我的问题是:

我有一个函数接受可变数量的参数.喜欢

void function (int paramN, ...);
Run Code Online (Sandbox Code Playgroud)

在我的程序中,没有办法知道,哪个是变量参数的类型,它可以是char,数组,int,short,函数点等...就像

function (paramN, "Hey, I'm a string", 1, function_pint, array, -1); // -1 is a sentinel.
Run Code Online (Sandbox Code Playgroud)

所以,我认为,一个int,是32位,在x86(32位)系统中,这将保存所有内存地址.所以,如果我用int得到所有参数,那就不会有问题了,例如,"嘿,我是一个字符串"这个字符串的地址,通常适合32位变量,所以,我只需要制作演员.

我是正确的?
我可以做吗?
注意:我不想让我的函数像printf(这个解决方案,在这种情况下不适合好吗?)

谢谢你的回答.
抱歉我的英语不好.

c variadic-functions

12
推荐指数
2
解决办法
1万
查看次数

关于编码签名/未签名的字符C问题

我读到C没有定义char是有符号还是无符号,而在GCC页面中这表示它可以在x86上签名并且在PowerPPC和ARM中无符号.

Okey,我正在用GLIB编写一个程序,将char定义为gchar(不超过它,只是标准化的一种方式).

我的问题是,UTF-8怎么样?它使用的不仅仅是一块内存?

说我有一个变量

unsigned char*string ="我的字符串,带UTF8 enconding~>çã";

如果我将变量声明为,请参阅

无符号

我将只有127个值(因此我的程序将存储更多的mem块)或UTF-8也会变为负值?

对不起,如果我无法正确解释,但我认为我有点复杂.

注意:感谢所有答案

我不明白它是如何正常解释的.

我认为像ascii一样,如果我的程序中有一个有符号和无符号的字符,字符串有不同的值,它会导致混淆,想象它在utf8中.

c utf-8 char

10
推荐指数
4
解决办法
5754
查看次数

我可以用枚举变量做什么?

当我声明这样的枚举变量时:

enum paint_colors { RED, GREEN, BLUE, ...} colors;
Run Code Online (Sandbox Code Playgroud)

colors可变的有用吗?如果是这样,我该怎么办呢?

提前致谢.

c variables enums typedef definition

9
推荐指数
2
解决办法
2万
查看次数

关于默认的C struct值,这段代码怎么样?

我正在尝试使用默认值创建结构.我不知道如何实现这一点,因为我看到的每一个代码都是关于初始化的,我会以自然的方式来做...

struct stuff {
  int stuff_a = 1;
  int stuff_b = 2...
  ...and so on...
};
Run Code Online (Sandbox Code Playgroud)

看,我发现这个(C++)代码:

struct a{   a() : i(0), j(0) {};  INT i;   INT j;}
Run Code Online (Sandbox Code Playgroud)

我从来没有为C看过这样的事.请帮我理解; 我觉得这很好!

更新:等等,我问的是C !!!! 为什么改变我的问题?如果在C中不可能这样说...我不知道C++,我不知道那是关于C++的...

c struct

9
推荐指数
4
解决办法
1万
查看次数

FPS怎么计算这个?

在我的OpenGL书中,它说:

"在这样的系统中经常发生的是帧太复杂而不能在1/60秒内绘制,因此每帧显示不止一次.例如,如果绘制一帧需要1/45秒,你会得到30 fps,图形空闲时间为每帧1/30 1/45 = 1/90秒,或三分之一时间."

在句子中说"画一帧需要1/45秒,你得到30帧/秒",为什么我只得到30帧/秒?Woudl 45 fps不是更正确吗?

opengl frame-rate

7
推荐指数
2
解决办法
1236
查看次数

我如何在C中将类型的变量更改为另一个?

我要做:

int main () {
  bla bla bla

  void *onetype;

  switch (USER_INPUT_TYPE) {

      CASE CONVERT_TO_CHAR:
          convert onetype VOID TO CHAR >>> HOW???

      CASE CONVERT_TO_INT:
          convert onetype VOID TO INT >>> HOW???

   LOT OF CASES...
   }
}
Run Code Online (Sandbox Code Playgroud)

是的,我知道类型转换,但是类型转换是一种"临时"改变.

那么,有没有办法在C中完成它?

编辑:

停止停止!请看,你在做什么是类型转换,我知道,你正在创建另一个所需类型的变量,如int i =(int)onetype,我不想要这个,我想要其他像onetype =(int )ontyype,不重新创建它们,不分配另一个变量.

非常感谢!

c types casting

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