我在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)
所以我认为函数指针没有时间差异,也没有像许多人所说的那样使程序运行缓慢.
我正在尝试将复合文字分配给变量,但似乎不起作用,请参阅:
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值.
提前致谢.
我的结构是这样的
typedef struct {
type1 thing;
type2 thing2;
...
typeN thingN;
} my_struct Run Code Online (Sandbox Code Playgroud)
如何在循环中枚举struct childrens,例如while,或for?
我想知道,为什么在没有包含胶水代码的情况下让程序在许多操作系统(如Windows和Linux)中运行太难了.它们都共享相同的架构(x86),所以我认为它应该很简单.此外,C是标准化的,那么为什么这些操作系统的实现不同?为什么难以遵循标准并为所有操作系统实现通用库?
我用C编程了将近两年,目前我使用glib来实现可移植性.
我不是在寻找这个问题的解决方案,我已经为此目的使用了glib.但是我想知道为什么它是必要的,为什么制造一个没有差异的C库是很困难的.
[加]
例如,当我在C/Glib中编写程序时,我使用gchar/gint等类型确实是C基元类型,在wikipedia中关于glib,它说:
"特征
在基本层面上,GLib提供了类型定义,取代了C原型char,int,float等,以提高可移植性"
为什么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没有定义char是有符号还是无符号,而在GCC页面中这表示它可以在x86上签名并且在PowerPPC和ARM中无符号.
Okey,我正在用GLIB编写一个程序,将char定义为gchar(不超过它,只是标准化的一种方式).
我的问题是,UTF-8怎么样?它使用的不仅仅是一块内存?
说我有一个变量
unsigned char*string ="我的字符串,带UTF8 enconding~>çã";
如果我将变量声明为,请参阅
无符号
我将只有127个值(因此我的程序将存储更多的mem块)或UTF-8也会变为负值?
对不起,如果我无法正确解释,但我认为我有点复杂.
注意:感谢所有答案
我不明白它是如何正常解释的.
我认为像ascii一样,如果我的程序中有一个有符号和无符号的字符,字符串有不同的值,它会导致混淆,想象它在utf8中.
当我声明这样的枚举变量时:
enum paint_colors { RED, GREEN, BLUE, ...} colors;
Run Code Online (Sandbox Code Playgroud)
是colors可变的有用吗?如果是这样,我该怎么办呢?
提前致谢.
我正在尝试使用默认值创建结构.我不知道如何实现这一点,因为我看到的每一个代码都是关于初始化的,我会以自然的方式来做...
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++的...
在我的OpenGL书中,它说:
"在这样的系统中经常发生的是帧太复杂而不能在1/60秒内绘制,因此每帧显示不止一次.例如,如果绘制一帧需要1/45秒,你会得到30 fps,图形空闲时间为每帧1/30 1/45 = 1/90秒,或三分之一时间."
在句子中说"画一帧需要1/45秒,你得到30帧/秒",为什么我只得到30帧/秒?Woudl 45 fps不是更正确吗?
我要做:
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,不重新创建它们,不分配另一个变量.
非常感谢!