当前位置:首页 > 教育培训 >

c语言难不难学(数据结构c语言版难不难学)

来源:原点资讯(www.yd166.com)时间:2023-06-20 02:41:54作者:YD166手机阅读>>

不推荐使用的功能

C 语言拥有悠长的发展历史,尽管 C 语言一直在努力实现向后兼容,但仍有一些功能是我们应该避免使用的。

  • atoi与atol:这两个函数在出错时会返回 0,但这也是一个有效的返回值。个人更推荐 strtoi 等。

  • gets :不安全,因为这些函数无法给出目标缓冲区的界限。个人更喜欢 fgets。

c语言难不难学,数据结构c语言版难不难学(5)

数组不是值

在学习 C 语言的过程中,我们必须认识到,C 语言作为一种语言,只处理大小已知的数据块。你可以认为 C 语言是一种“复制已知大小值的语言”。

我们可以向程序传递整数或结构,通过函数返回它们,并将它们视为相应的对象,因为 C 知道它们的大小,因此 C 可以编译代码,并复制完整的数据。

然而,数组却完全不同。对于 C 语言来说,数组的大小是未知的。假设我在一个函数中声明了一个变量 int[5],实际上我得到的并不是类型 int[5] 的值,而是一个 int* 值,它指向的位置分配了 5 个整数。由于这只是一个指针,因此程序员必须代替语言来负责复制真正的数据并保证数据有效。

但是,结构内的数组与值一样,可以与结构一起复制。

(严格来讲,指定了大小的数组是真正的类型,而不仅仅是指针,例如你可以通过 sizeof 得知整个数组的大小。只不过,你不能将它们视为独立的值。)

c语言难不难学,数据结构c语言版难不难学(6)

编译器的各种选项

C 语言的编译器有很多选项,而且默认值不是很好用。下面是一些你可能需要的选项。

  • -O2:在发布代码时,对代码进行优化。

  • -g -Og:用于调试代码,可以让调试器输出额外的信息,并根据调试进行优化。

  • -Wall:启用更多警告(有点像 linter),你可以通过-Wno禁用特定警告。

  • -Werror:警告变成错误。我建议启用 -Werror=implicit,这样可以确保调用未声明的函数会报错。

  • -DNAME 和 -DNAME=value:用于定义宏。

  • -std=...:选择一个标准。在大多数情况下,你可以省略这个选项,使用编译器的默认值(通常是最新标准)。如果你想使用“经典”C,可以指定 -std=c89。

c语言难不难学,数据结构c语言版难不难学(7)

三种类型的内存,以及何时使用它们

自动存储:用于保存局部变量。当函数被调用时,就会创建一个新的自动存储区域,并在函数返回结果时删除。只有返回值会被保留,并被复制到调用它的函数的自动存储中。这意味着,返回一个指向局部变量的指针是不安全的,因为底层数据会被默默删除。自动存储通常被称为“栈”。

分配的存储:运行malloc 会返回的内存类型,这种内存会一直保留,直到被 free 函数释放,所以可以被传递到任何地方,包括返回给上级调用函数。通常被称为“堆”。

静态存储:在程序的整个生命周期内有效。在进程启动时分配,全局变量都存储在这里。

如果想通过一个函数“返回”内存,不必通过调用 malloc,可以直接将一个指向本地数据的指针传递给函数:

void getData(int *data) {data[0] = 1;data[1] = 4;data[2] = 9;}void main {int data[3];getData(data);printf("%d\n", data[1]);}

c语言难不难学,数据结构c语言版难不难学(8)

栏目热文

c语言中关键字代表什么(c语言关键字及其含义举例)

c语言中关键字代表什么(c语言关键字及其含义举例)

任何事物都需要一个名字,名字在计算机里叫标识符,标识符是有命名规范的:1、标识符由字母(A-Z,a-z)、数字(0-9)...

2023-06-20 02:59:33查看全文 >>

c语言命令大全(c语言指令命令大全)

c语言命令大全(c语言指令命令大全)

C程序的源代码中可包括各种编译指令,这些指令称为预处理命令。虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境...

2023-06-20 02:31:31查看全文 >>

大一c语言容易挂科吗(大一c语言怎么才能不挂科)

大一c语言容易挂科吗(大一c语言怎么才能不挂科)

在大学阶段每学期都是需要进行期末考试,每门专业课的成绩都需要达到及格线以上。如果成绩不合格的话就会被挂科,大学正常的挂科...

2023-06-20 03:03:10查看全文 >>

c语言中的32个关键字通俗含义(c语言关键字详细解释)

c语言中的32个关键字通俗含义(c语言关键字详细解释)

auto 局部变量(自动储存) break无条件退出程序最内层循环 case switch语句中选择项 char单字...

2023-06-20 02:37:56查看全文 >>

c语言关键词详细解释(40节免费编程课)

c语言关键词详细解释(40节免费编程课)

保留字(reserved word) 保留字又称关键字。 指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或...

2023-06-20 02:34:31查看全文 >>

c语言关键字翻译(c语言关键字中英文翻译器代码)

c语言关键字翻译(c语言关键字中英文翻译器代码)

在文章 和 中对关键const和static详细讲解,这一节将继续讲解关键字register&extern。通过...

2023-06-20 02:56:08查看全文 >>

c语言中关键字有多少(c语言一共有多少个关键字)

c语言中关键字有多少(c语言一共有多少个关键字)

喜欢的可以收藏转发加关注谈及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是“让我欢喜让我忧。”欢喜的是,C语言功能...

2023-06-20 03:15:38查看全文 >>

c语言中int是什么意思(c语言里面的int是什么意思)

c语言中int是什么意思(c语言里面的int是什么意思)

C语言中有没有见过(int [2]){19,20}或者int (*pt2)[4]的使用方法,字面上可能不好理解,这是C9...

2023-06-20 02:42:30查看全文 >>

c语言关键字37个及其含义(c语言关键字及其含义举例)

c语言关键字37个及其含义(c语言关键字及其含义举例)

这次跟大家分享的,是关于C语言里面常用的16个关键字。通通给你们整理出来了~赶紧拿小本本记下来~!下次发布剩下的~量不在...

2023-06-20 02:44:29查看全文 >>

c语言空字符(c语言怎么使字符串为空)

c语言空字符(c语言怎么使字符串为空)

C语言中是没有字符串这个变量类型的,但是我们可以把字符串存储在char数组中,这个数组的最后一位是字符\0,即空字符,A...

2023-06-20 02:54:43查看全文 >>

文档排行