Tag: 变量

在C中声明和修改字符串

我最近开始尝试学习C编程语言。 在我的第一个程序(简单的hello world事物)中,在我意识到我不能只执行variable_name = “string data”后,我遇到了声明字符串的不同方法: char *variable_name = “data” char variable_name[] = “data” char variable_name[5] = “data” 我不明白的是它们之间的区别。 我知道它们是不同的,其中一个专门分配了一定数量的内存来存储数据,但这就是它,我觉得我需要在C中更加复杂的概念之前理解这一点。 另外,为什么使用*variable_name让我将变量名重新分配给新字符串,但是variable_name[number]或variable_name[]不是? 当然,如果我给它分配10个字节( char variable_name[10] = “data” )并尝试将其重新分配给10个字节或更小的东西它应该可以工作,那么为什么不呢? 什么是空括号和星号做什么?

C,处理变量参数函数

假设我想做这样的事情 void my_printf(char *fmt,…) { char buf[big enough]; sprintf(buf,fmt,…); } 将可变数量的参数直接传递给具有接受变量参数的函数的正确方法是什么?

C中的动态变量声明

我是一个ruby开发人员,它早在我用C编码就已经很久了。我有这个小问题 – 基本上我想在C中使用一个数据类型,其行为类似于C中的符号。 换句话说,这可能在C? 程序要求用户输入名称 用户回复 – “foobar” 声明一个具有相同名称的整数,即 int foobar 谢谢

如何从另一个C文件中访问变量?

我有两个C文件。 我想在一个中声明一个变量,然后能够从另一个C文件访问它。 我对示例字符串的定义可能并不完美,但您明白了。 //file1.c char *hello=”hello”; //file2.c printf(“%s”,hello);

何时将内存分配给C中的局部变量

由于局部变量也称为自动变量,并且在访问函数时应该在运行时分配内存。 int main(){ int a; // declaration return 0; } int main(){ int a[]; // compilation error, array_size missing return 0; } int main(){ int a[2]; // declaration, but can’t work without array_size, // so at compile time it is checked! return 0; } 我的问题是,在C中声明中给出array_size是一个规则,还是在编译时为数组分配内存(仍然是本地变量) 它是如何工作的? 根据K&R的C编程,数组是一个变量。 第161号。

在没有赋值的情况下初始化struct?

我无法在互联网上找到答案,所以这是我的问题:我可以定义一个结构实例而不将其分配给C中的本地或全局变量吗? 例如: struct A { int b; } struct A foo() { return struct A { .b = 42 }; } 如果这不可能:为什么?

C中指针变量的冲突类型(错误)

(1) #include #include int a = 10, b = 20 , c = 30, d, e, *pa, *pb, *pc; d= 10; e= 100; pa = &a; pb = &b; int main() { printf(“%i, %i, %i, %i”, pa, pb, d, e); return 0; } (2) #include #include int a = 10, b = 20 , c […]

至少内部名称的前31或63个字符是重要的?

以下是本书的直接引用(K&R,第2版,第35页): “至少内部名称的前31个字符是重要的。对于函数名称和外部变量,数字可能小于31,因为外部名称可能被汇编程序和加载程序使用,语言无法控制。对于外部名称,该标准仅保证6个字符和一个案例。“ 在C99中,其内部名称没有长度限制,但只有前63个保证是重要的(§5.2.4.1翻译限制)。 我的问题是为什么这些限制特别是31或63 ? 为什么这个号码具体? 为什么不是19,24或任何其他数字? 如果这是一个实施问题,是否可以从31或63获益?

C:无论如何将参数加载到system()调用中

是否可以在系统调用中添加参数? 就像是 system(“rm %s %s”, string1, string2)

全局变量实现

当我写下面的程序时: 档案1: #include int global; void print_global1() { printf(“%p\n”, &global); } 文件2: #include char global; void print_global2() { printf(“%p\n”, &global); } 档案3: void print_global1(); void print_global2(); int main() { print_global1(); print_global2(); return 0; } 输出: $ ./a.out 0x804a01c 0x804a01c 这是我的问题: 为什么链接器将“int global”和“char global”实现为相同的全局变量: 为什么编译器不会抱怨(不是最小的警告-Wall -Wextra -ansi …) 如何管理全局变量的大小(int和char的大小不同) PS:第二个问题是架构/编译器相关,所以让我们把gcc或Visual C ++(对于C)的int大小为32位 编辑:这不是C ++的问题,但对于C! 我使用gcc版本4.4.1和Ubuntu 9.10,这是编译控制台输出: […]