我是C编程的新手,在理解C编程中不同库函数的常见陷阱和常见用法时遇到了问题。有没有人可以给我一个很好的资源,让我学习C编程的精妙之处。也可以有人给我一个很好的资源,学习像gdb这样的调试工具。
另外,我想知道char *c="hello";和char c[10]="hello"之间的区别。有人能告诉我在不同的情况下推荐哪一个吗?
感谢和问候,
老鼠。
发布于 2010-07-17 03:42:48
只需读取The C Programming Language并编写代码即可。如果你是新手,那么你需要第一手的经验,这样你才能了解其中的微妙之处。仅仅阅读列表并不会有很大的帮助。
发布于 2010-07-17 03:49:39
char *c = "hello";这使得c成为一个指针,并且指向不应该被修改的内存(所以你不能修改数据)。但由于c是一个指针,您可以更改它所指向的位置。
char c[10] = "hello";这使c成为一个数组,并安排使用指定的字符串初始化该数组。因为它是一个数组,所以您可以修改数据(尽管要确保不会使缓冲区溢出),但不能更改内存中c引用的位置。
发布于 2010-07-17 03:55:23
区别如下:
char *c = "hello";创建了几个东西:
在内存中填充一个名为c
char*,其中填充有“\0”
c设置为该静态内存的地址鉴于:
char c[10] = "hello";创建:
char* char* c (参见下文注释)char* in memory someplacec to the first location of the first location in上述c[5]"hello"可能会也可能不会被分配到内存中的某个位置。此外,注意:
在第二种情况下,从技术上讲,并不是数组和变量都只是为了包含数组的地址而存在,只是看起来是这样的。因此,c实际上只是数组中第一个位置的地址的别名。在下面的评论中更新了Tim的信息。
https://stackoverflow.com/questions/3268292
复制相似问题