c语言学习心得

来源:互联网 发布:msp430单片机价格 编辑:程序博客网 时间:2024/06/06 00:15

C程序结构

C语言基本语法

2.1 数据类型

2.2 C变量

变量是程序可操作的存储区的名称。c中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。

2.2.1变量的定义

即告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表。

2.2.2变量声明

变量声明向编译器保证以指定的类型和名称存在,编译器可在不需要知道变量完整细节的情况下也可以继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。
变量多的声明有两种情况:
1、需要建立存储空间的。如:int a在声明的时候已经建立了存储空间。
2、不需要建立存储空间的,使用extern关键字声明变量名而不是定义它。如:extern int a其中变量a可以在别的文件中定义。
除非有externa关键字,否则都是变量的定义。
|–extern int i ; //声明,不是定义
|–int i; //声明,也是定义
|–extern int a=0;//定义一个全局变量并赋给初值。一旦赋给初值一定是定义,定义才会分配存储空间。

2.2.3左值(Lvalues)和右值(Rvalues)

1.左值(lvalue):指向内存位置的表达式被称为左值表达式,可出现在赋值号的左边和右边。
2.右值(rvalue):存储在内存中某些地址的数值。不能对其进行赋值的表达式。仅可以出现在赋值号右边。
变量是左值,数值型的字面值是右值。
需要保存数据的时候,用左值;需要读取数据 的时候用右值。

2.2.4变量的内存寻址(与系统有关)

(1)内存寻址由大到小,优先分配内存地址比较大的字节给变量,所以说变量越先定义,内存地址就越大。
如下面代码,先定义变量 a,再定义变量 b,打印出 a 的地址是 0x7fff5fbff828,b 的值是 0x7fff5fbff824。a 的地址比 b 的地址大 4 字节。
(2)变量地址的获取方式:& 变量名。
(3)输出地址的方式:%p。
(4)一个变量一定要先初始化才可以使用,因为 c 语言中默认一个没有初始化的变量值是一个不可知的很大值。
第一点和第四点有些小伙伴运行结果可能有差异:
环境说明:
OS:Ubuntu 16.10
gcc:6.2.0
实际执行结果发现,内存寻址由小到大,越先定义的值,内存地址越小。变量如果没有初始化,默认输出为 0。

2.3常量(字面量)

2.3.1整数常量

2.4存储类

存储类定义c程序中变量/函数(可见性)和生命周期。
auto存储类:所有局部变量默认的存储类。只能用在函数内,修饰局部变量。
register存储类:定义存储在寄存器中而不是RAM中的局部变量。变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的’&’运算符(因为它没有内存位置)。
寄存器只用于需要快速访问的变量,比如计数器。还应注意的是,定义 ‘register’ 并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制。
static存储类:指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。
static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
static 是全局变量的默认存储类,以下两个变量 (count 和 road) 都有一个 static 存储类。
extern存储类:用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 ‘extern’ 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。
存储类参考:http://www.runoob.com/cprogramming/c-storage-classes.html

2.5 运算符

  • 优先级

    2.6 判断

    2.7 循环

    2.8 函数

    函数是一组一起执行一个任务的语句。
    函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。
    函数=方法=子例程=程序

    定义函数

return_type function_name( parameter list ){   body of the function}

在 C 语言中,函数由一个函数头和一个函数主体组成。下面列出一个函数的所有组成部分:

  • 返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。
  • 函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名
  • 参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。
  • 函数主体:函数主体包含一组定义函数执行任务的语句。

函数声明
告诉编译器函数名称及如何调用函数。函数的实际主体可以单独定义。
包括以下几个部分:

return_type function_name( parameter list );

函数声明中,参数名称并不重要,参数的类型是必须的。
当您在一个源文件中定义函数且在另一个文件中调用函数时,函数声明是必需的。在这种情况下,您应该在调用函数的文件顶部声明函数。

调用函数

  1. 函数声明
  2. 程序实体调用函数
  3. 函数定义
    函数参数
    形式参数进入函数时被创建,退出函数时被销毁。
    传值调用和引用调用

错误处理