Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要C编程方面的帮助吗_C - Fatal编程技术网

需要C编程方面的帮助吗

需要C编程方面的帮助吗,c,C,我是C编程新手,在理解C编程中不同库函数的常见陷阱和常见用法时遇到问题。有没有人能告诉我一个好的资源,在那里我可以学习C编程的精妙之处。还有人可以给我一个很好的资源学习调试工具,比如gdb 我还想知道char*c=“hello”和和字符c[10]=“你好”。有谁能告诉我,在不同的情况下,推荐哪一个 谢谢和问候 鼠标。只需读写代码即可。如果你是新手,那么你需要第一手的经验,这样你才能了解其中的微妙之处。仅仅阅读一份清单并不会有很大帮助 char *c = "hello"; 这使得c成为一个指针,

我是C编程新手,在理解C编程中不同库函数的常见陷阱和常见用法时遇到问题。有没有人能告诉我一个好的资源,在那里我可以学习C编程的精妙之处。还有人可以给我一个很好的资源学习调试工具,比如gdb

我还想知道
char*c=“hello”和
字符c[10]=“你好”
。有谁能告诉我,在不同的情况下,推荐哪一个

谢谢和问候

鼠标。

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

char *c = "hello";
这使得
c
成为一个指针,指向不应该修改的内存(因此您不能修改数据)。但是由于
c
是一个指针,您可以更改它指向的位置

char c[10] = "hello";

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

区别如下:

char *c = "hello";
创造了几个东西:

  • 被称为
    c
  • 内存中的静态字符串,填充“hello\0”
  • 它将
    c
    设置为该静态内存的地址
鉴于:

char c[10] = "hello";
创建:

  • 一个名为
    c
    char*
    (见下面的注释)
  • 内存中某处有10个插槽
  • c
    设置为上述中第一个位置的地址
  • 它处理
    “hello”
    就像
    {'h'、'e'、'l'、'l'、'o'、'\0'}
    ,从而通过
    c[5]
    将这些值复制到
    c[0]
  • 根据编译器的不同,
    “hello”
    可能会,也可能不会被分配到内存中的某个位置
注:


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

对于该语言本身,这是一本不错的读物。一定要做练习

另一个有用的资源是。你已经问过了(也一定要读一读)


上面的链接对此进行了解释,但只是要强调:指针和数组在C语言中不是一回事。相反,在某些情况下,语言需要指针,但您可以使用数组,数组将被自动转换。

对于gdb,文档是在线的


和一个我觉得有用的备忘录:

< p>我的第一个建议是除非你有一个很好的学习C的理由,否则学习C++。我意识到这可能会引起一些人的争议;如果你还没有这么做,就要考虑一下。

对于资源,在第一个例子中,一本好书总是最好的,但是如果你在寻找在线资源,你会发现很多是C++相关的,有些是用C和C++处理的;不同的写作风格和表达方式适合不同的用户;尝试以下几种方法:

以下C++相关站点包括C标准库的优秀覆盖率:


关于GDB,我对使用符号调试器的好处表示赞赏,值得注意的是,有许多开发人员避免使用这一重要工具,但建议使用原始GDB可能会让您终生放弃使用这类工具。如果你能在Windows上使用VC++,它的调试器是首屈一指的,而VC++Express是免费的。如果必须使用GDB(因为您使用的是Linux),我建议您使用集成到IDE(如Eclipse或KDevelop)中的GDB,或者使用独立的Insight调试器。如果您选择成为硬核并直接使用GDB,那么除了GDB本身之外,似乎没有多少关于如何有效使用GDB的资源。还有30美元。

如果你有数学方面的兴趣,可能会在某些领域给你一些好的实践,特别是在数组操作等方面


但是请记住,编程不仅仅是数学——不管你的教授可能会告诉你什么。

安德鲁·柯尼格(Andrew Koenig)的《C陷阱和陷阱》(C Traps and Pitts)是一本学习C陷阱的好书。不过,这是一本很薄的书。其他人提到的comp.lang.c FAQ也是一个很好的资源。

尝试搜索“c编程难题”,你会发现很多关于语言本身微妙之处的资源(还有很多)。例如

在此处分配问题,尝试将它们作为单独的问题重新发布。还可以尝试搜索每个子问题。我相信搜索这个网站会给你一些很好的教程链接。你的问题标题根本不能描述你的问题。明智的做法是对其进行编辑和重新措辞,使其具有实际意义。关于
char*
char[]
的问题已经被多次询问和回答。这里有一个:@mousey:分别问前两个问题。您将得到答案。有关C的书籍,请参阅。我熟悉C标准库中的所有函数。但是我经常被需要特别注意的c指针和函数所欺骗。智慧之词,+1代表Kernighan&Ritchie@mousey:所以你的问题不是真正的标准库,而是一些关于精确理解指针的问题。那么K&R是最好的choice@mousey但是C++中的指针(你说你熟悉)与C中的指针相同;那么真正的问题是什么?+1:我在回答中没有特别提到K&R,因为你已经提到了。作为"a",