From 1aef769e3f61dc595eca8b257f1ced6d223777e4 Mon Sep 17 00:00:00 2001 From: ruanyf Date: Thu, 9 Sep 2021 16:05:05 +0800 Subject: [PATCH] docs(): fixed #19 --- docs/flow-control.md | 15 +++++++++++++++ docs/function.md | 2 ++ docs/string.md | 8 ++++++++ docs/struct.md | 4 ++-- 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/docs/flow-control.md b/docs/flow-control.md index da70010..f3d6430 100644 --- a/docs/flow-control.md +++ b/docs/flow-control.md @@ -417,5 +417,20 @@ bail: 上面代码有很复杂的嵌套循环,不使用 goto 的话,想要完全跳出所有循环,写起来很麻烦。 +goto 的另一个用途是提早结束多重判断。 + +```c +if (do_something() == ERR) + goto error; +if (do_something2() == ERR) + goto error; +if (do_something3() == ERR) + goto error; +if (do_something4() == ERR) + goto error; +``` + +上面示例有四个判断,只要有一个发现错误,就使用 goto 跳过后面的判断。 + 注意,goto 只能在同一个函数之中跳转,并不能跳转到其他函数。 diff --git a/docs/function.md b/docs/function.md index 4272915..7b75ba0 100644 --- a/docs/function.md +++ b/docs/function.md @@ -360,6 +360,8 @@ int main(void) { 上面示例中,函数`foo()`定义在其他文件,`extern`告诉编译器当前文件不包含该函数的定义。 +不过,由于函数原型默认就是`extern`,所以这里不加`extern`,效果是一样的。 + ### static 说明符 默认情况下,每次调用函数时,函数的内部变量都会重新初始化,不会保留上一次运行的值。`static`说明符可以改变这种行为。 diff --git a/docs/string.md b/docs/string.md index 378d0b9..ff32b95 100644 --- a/docs/string.md +++ b/docs/string.md @@ -133,6 +133,14 @@ s[0] = 'z'; 为什么字符串声明为指针时不能修改,声明为数组时就可以修改?原因是声明为指针时,字符串是一个保存在内存“栈区”(stack)的常量,“栈区”的值由系统管理,一般都不允许修改;声明为数组时,字符串的副本会被拷贝到内存“堆区”(heap),“堆区”的值由用户管理,是可以修改的。 +为了提醒用户,字符串声明为指针后不得修改,可以在声明时使用`const`说明符,保证该字符串是只读的。 + +```c +const char* s = "ello, world!"; +``` + +上面字符串声明为指针时,使用了`const`说明符,就保证了该字符串无法修改。一旦修改,编译器肯定会报错。 + 第二个差异是,指针变量可以指向其它字符串。 ```c diff --git a/docs/struct.md b/docs/struct.md index f8ae790..e2d5482 100644 --- a/docs/struct.md +++ b/docs/struct.md @@ -9,9 +9,9 @@ C 语言内置的数据类型,除了最基本的几种原始类型,只有数 - 复杂的物体需要使用多个变量描述,这些变量都是相关的,最好有某种机制将它们联系起来。 - 某些函数需要传入多个参数,如果一个个按照顺序传入,非常麻烦,最好能组合成一个复合结构传入。 -为了解决这些问题,C 语言提供了`struct`命令,允许自定义复合数据类型,将不同类型的值组合在一起。这样不仅为编程提供方便,也有利于增强代码的可读性。C 语言没有其他语言的对象(object)和类(class)的概念,struct 结构很大程度上提供了对象和类的功能,可以将它视为只有属性、没有方法的类。 +为了解决这些问题,C 语言提供了`struct`关键字,允许自定义复合数据类型,将不同类型的值组合在一起。这样不仅为编程提供方便,也有利于增强代码的可读性。C 语言没有其他语言的对象(object)和类(class)的概念,struct 结构很大程度上提供了对象和类的功能,可以将它视为只有属性、没有方法的类。 -下面是`struct`命令自定义数据类型的一个例子。 +下面是`struct`自定义数据类型的一个例子。 ```c struct fraction {