首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要一些C编程方面的帮助

我需要一些C编程方面的帮助
EN

Stack Overflow用户
提问于 2010-07-17 03:40:54
回答 9查看 869关注 0票数 2

我是C编程的新手,在理解C编程中不同库函数的常见陷阱和常见用法时遇到了问题。有没有人可以给我一个很好的资源,让我学习C编程的精妙之处。也可以有人给我一个很好的资源,学习像gdb这样的调试工具。

另外,我想知道char *c="hello";char c[10]="hello"之间的区别。有人能告诉我在不同的情况下推荐哪一个吗?

感谢和问候,

老鼠。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-07-17 03:42:48

只需读取The C Programming Language并编写代码即可。如果你是新手,那么你需要第一手的经验,这样你才能了解其中的微妙之处。仅仅阅读列表并不会有很大的帮助。

票数 6
EN

Stack Overflow用户

发布于 2010-07-17 03:49:39

代码语言:javascript
复制
char *c = "hello";

这使得c成为一个指针,并且指向不应该被修改的内存(所以你不能修改数据)。但由于c是一个指针,您可以更改它所指向的位置。

代码语言:javascript
复制
char c[10] = "hello";

这使c成为一个数组,并安排使用指定的字符串初始化该数组。因为它是一个数组,所以您可以修改数据(尽管要确保不会使缓冲区溢出),但不能更改内存中c引用的位置。

票数 9
EN

Stack Overflow用户

发布于 2010-07-17 03:55:23

区别如下:

代码语言:javascript
复制
char *c = "hello";

创建了几个东西:

在内存中填充一个名为c

  • a
  • char*,其中填充有“

\0”

  • ,并将c设置为该静态内存的地址

鉴于:

代码语言:javascript
复制
char c[10] = "hello";

创建:

  • a char*
  • achar* c (参见下文注释)
  • 10char* in memory someplace
  • sets c to the first location of the first location in上述
  • ,它将D24视为类似于D25,从而通过编译器上的c[5]
  • depending将这些值复制到D26,"hello"可能会也可能不会被分配到内存中的某个位置。此外,

注意:

在第二种情况下,从技术上讲,并不是数组和变量都只是为了包含数组的地址而存在,只是看起来是这样的。因此,c实际上只是数组中第一个位置的地址的别名。在下面的评论中更新了Tim的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3268292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档