• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

chongs

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

C语言基础-数据和语句

3.1 基本数据类型

  1. 变量的3个属性:作用域,链接属性,存储类型。
  2. C语言仅含有4种基本数据类型:整形,浮点型,指针,聚合类型(如数组和结构等)。其他类型都是这几种类型的组合派生。

3.1.1 整型家族

  1. 整数类型包括:字符,短整型,整形,长整型。它们都有signed和unsigned两种版本。

整形变量的最小范围:

类型 最小范围
char 0~127
signed char -127~127
unsigned char 0~255
short int -32767~32767
unsigned short int 0~65535 (16bit)
int -32767~32767
unsigned int 0~65535
long int -2147483647~2147483647
unsigned long int 0~4294967295 (32bit)
  1. 枚举类型(enumerated)
    • enum color { red=8, blue, yellow };
    • enum color tree1,tree2;

3.1.2 浮点类型 所有浮点类型至少能容纳 10^-37 ~ 10^37之间的任何值。

3.1.3 指针

  1. 字符串常量(string literal)
    • 当一个字符串常量出现在一个表达式中时,表达式所使用的值就是这些字符所存储的地址。
    • 因此可以把赋值字符给一个指向字符的指针,但是不能直接将字符串赋值给字符数组。要想赋值,用标准c函数库里的函数如strcpy()。

3.2 基本声明

相等的整形声明:

short |short int |signed sort | signed short int unsigned short | unsigned short int
int |signed int |signed unsigned int | unsigned
long|long int |signed long | signed long int unsigned long int | unsigned long

3.2.1 声明指针

  1. int *a,*b,c;
    上式,a,b是指向int的指针,也就是地址。c是整型变量。 * 操作符是间接访问操作(indirection)。
  2. char *message = "hello world!"; 等同于下面的代码: char *message; message = "hello world!";
    这里的message是一个指向字符的指针,并用字符串第一个字符的地址给message初始化。

3.3 typedef

为各种数据类型定义新的名字。
typedef char *ptr_char; ptr_char a,b,c;
上式三个a,b,c都是指向字符的指针。

3.4 常量

  1. 一般常量的初始化:可以在声明变量的时候初始化,或者函数形参const在被调用时会被实参赋值。
  2. const声明指针变量时
    • a.int * const tmp; 可以修改指针的值,不能修改指针所指的值
    • b.int const *tmp; 与a相反
    • c.int const * const tmp; 都不可修改

3.5 作用域

  1. 代码块作用域(block scope):位于一对花括号之间的所有语句。
  2. 文件作用域(file scope):任何在代码块之外声明的标识符,这是标识符从他们声明处到原文件结尾都是可以访问的。
  3. 原型作用域(prototype scope):函数原型中声明的参数名(int fun1( int prototype );)
  4. 函数作用域(function scope):语句标签,用于goto语句。

3.6 链接属性

标识符的链接属性由三种:external,internal,none。

  1. 代码块之外都是external属性,代码块之内需要加上extern从internal变为external。对整个程序来说都是全局变量。
  2. 具有external属性的实体总是具有静态存储类型!
  3. 关键字:extern,static。

3.7 存储类型(storage class)

  1. 普通内存:即非堆栈的内存。凡是在代码块之外定义的都是静态变量,无法再指定其他存储类型,在程序运行之前创建,整个程序运行期间都存在。
  2. 堆栈:在代码块之内声明的变量的缺省存储类型都是automatic;关键字为auto,但很少用。可以给变量加上static 关键字改变存储类型,但不修改作用域 。形参不能声明为静态变量。
  3. 寄存器:用于自动变量的声明,提示存储在寄存器中而不是内存。

static关键字:

  1. 当static位于代码块之外时,只修改标识符的链接属性 (external->internal),并不改变存储类型和作用域。
  2. 当它作用于代码块内部时,static只修改变量的存储类型 (auto->static)并不改变链接属性和作用域。

4.1 空语句

空语句本身只包含一个分号,表示不执行任何任务。
例:while( getchar() != '\n') ;

4.2 表达式语句

  1. C语言并不存在专门的赋值语句,赋值在表达式里面进行。
  2. 注意下面语句也是合法的:x * 4; getchar();
    第一条语句虽然被执行但是没有任何效果,计算得到的结果并没有被保存下来。
  3. printf("hello,world!"); 这条语句也跟上面类似,printf也有返回值(它实际打印字符的个数) 由于不关心这个值所以弃之不理。

4.3 switch语句

例:

switch ( command ){
    case 1:
        add();
        break;
    case 2:
        sub();
        break;
    case 3:
        /* fall thru */
    case 4:
        mul();
        break;
    default:
        printf("wrong intput!");
        exit();
}

4.4 goto 语句

一般不要使用goto语句,非常危险。
下面是一个可以使用goto语句的情况:

while( exp1 ){
    while( exp2 ){
        while( exp3 ){
            if( back ) goto quit;
        }
    }
}
quit: ;

PS: 由于break语句只能影响包它的最内层的循环,要想立即跳出循环,可以使用goto语句。
也可以所有循环放在一个函数里,当需要从里层循环退出时,使用return语句离开函数。

C语言不具有任何输入输出语句和异常处理语句,都是通过调用函数库来完成的!!!

posted on 2024-05-12 21:11  chongss  阅读(5)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3