mirror of
https://github.com/wangdoc/clang-tutorial.git
synced 2026-02-03 02:43:44 +08:00
docs(): fixed #19
This commit is contained in:
@@ -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 只能在同一个函数之中跳转,并不能跳转到其他函数。
|
||||
|
||||
|
||||
@@ -360,6 +360,8 @@ int main(void) {
|
||||
|
||||
上面示例中,函数`foo()`定义在其他文件,`extern`告诉编译器当前文件不包含该函数的定义。
|
||||
|
||||
不过,由于函数原型默认就是`extern`,所以这里不加`extern`,效果是一样的。
|
||||
|
||||
### static 说明符
|
||||
|
||||
默认情况下,每次调用函数时,函数的内部变量都会重新初始化,不会保留上一次运行的值。`static`说明符可以改变这种行为。
|
||||
|
||||
@@ -133,6 +133,14 @@ s[0] = 'z';
|
||||
|
||||
为什么字符串声明为指针时不能修改,声明为数组时就可以修改?原因是声明为指针时,字符串是一个保存在内存“栈区”(stack)的常量,“栈区”的值由系统管理,一般都不允许修改;声明为数组时,字符串的副本会被拷贝到内存“堆区”(heap),“堆区”的值由用户管理,是可以修改的。
|
||||
|
||||
为了提醒用户,字符串声明为指针后不得修改,可以在声明时使用`const`说明符,保证该字符串是只读的。
|
||||
|
||||
```c
|
||||
const char* s = "ello, world!";
|
||||
```
|
||||
|
||||
上面字符串声明为指针时,使用了`const`说明符,就保证了该字符串无法修改。一旦修改,编译器肯定会报错。
|
||||
|
||||
第二个差异是,指针变量可以指向其它字符串。
|
||||
|
||||
```c
|
||||
|
||||
@@ -9,9 +9,9 @@ C 语言内置的数据类型,除了最基本的几种原始类型,只有数
|
||||
- 复杂的物体需要使用多个变量描述,这些变量都是相关的,最好有某种机制将它们联系起来。
|
||||
- 某些函数需要传入多个参数,如果一个个按照顺序传入,非常麻烦,最好能组合成一个复合结构传入。
|
||||
|
||||
为了解决这些问题,C 语言提供了`struct`命令,允许自定义复合数据类型,将不同类型的值组合在一起。这样不仅为编程提供方便,也有利于增强代码的可读性。C 语言没有其他语言的对象(object)和类(class)的概念,struct 结构很大程度上提供了对象和类的功能,可以将它视为只有属性、没有方法的类。
|
||||
为了解决这些问题,C 语言提供了`struct`关键字,允许自定义复合数据类型,将不同类型的值组合在一起。这样不仅为编程提供方便,也有利于增强代码的可读性。C 语言没有其他语言的对象(object)和类(class)的概念,struct 结构很大程度上提供了对象和类的功能,可以将它视为只有属性、没有方法的类。
|
||||
|
||||
下面是`struct`命令自定义数据类型的一个例子。
|
||||
下面是`struct`自定义数据类型的一个例子。
|
||||
|
||||
```c
|
||||
struct fraction {
|
||||
|
||||
Reference in New Issue
Block a user