当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
2015年计算机等级考试二级C语言基础教程:数据类型、变量和运算符(3)
发布时间:2010/11/2 16:24:29 来源:城市学习网 编辑:ziteng
  (2) 字符型变量
  字符型变量可以用三种方法赋值。
  例如:
  main()
  {
  char a0, a1, a2; /*定义局部字符型变量a0, a1, a2*/
  a0='b'; /*将字母b赋给a0*/
  a1=50; /*将数字2(十进制ASCII值为50赋给a1*/
  a2='\x0d'; /*将回车符赋给a2*/
  .
  .
  .
  }
  (3) 指针型变量
  例如:
  main()
  {
  int *i;
  char *str;
  *i=100;
  str="Good";
  .
  .
  .
  }
  *i表示i是一个指向整型数的指针, 即*i是一个整型变量, i是一个指向该整型变量的地址。
  *str表示str是一个字符型指针, 即保留某个字符地址。在初始化时, str没有什么特殊的值, 而在执行str="Good"时, 编译器先在目标文件的某处保留一个空间存放"Good\0"的字符串, 然后把这个字符串的第一个字母"G"的地址赋给str, 其中字符串结尾符"\0"是编译程序自动加上的。
  对于指针变量的使用要特别注意。上例中两个指针在说明前没有初始化, 因此这两指针为随机地址, 在小存储模式下使用将会有破坏机器的危险。正确的使用办法如下:
  例如:
  main()
  {
  int *i;
  char *str;
  i=(int*)malloc(sizeof(int));
  i=420;
  str=(char*)malloc(20);
  str="Good, Answer!";
  .
  .
  .
  }
  上例中, 函数(int*)malloc(sizeof(int))表示分配连续的sizeof(int)=2个字节的整型数存储空间并返回其首地址。同样(char*)malloc(20)表示分配连续20 个字节的字符存储空间并返回首地址(有关该函数以后再详述)。由动态内存分配函数malloc()分配了内存空间后, 这部分内存将专供指针变量使用。
  如果要使i指向三个整型数, 则用下述方法。
  例如:
  #include
  main()
  {
  int *a;
  a=(int*)malloc(3*sizeof(int));
  *a=1234;
  *(a+1)=4567;
  *(a+2)=234;
  .
  .
  .
  }
  *i=1234表示把1234存放到i指向的地址中去, 但对于*(i+1)=4567, 如果认为将4567存放到i指向的下一个字节中就错了。Turbo C2.0中只要说明i为整型指针,
  则 (i+1) 等价于 i+1*sizeof(int)
  同样 (i+2) 等价于 i+2*sizeof(int)
  2. 数组变量的赋值
  (1) 整型数组和浮点数组的赋值
  例如:
  main()
  {
  int m[2][2];
  float n[3];
  m[0][0]=0, m[0][1]=17, m[1][0]=21;/*数组元素赋值*/
  n[0]=109.5, n[1]=-8.29, n[2]=0.7;
  .
  .
  .
  }
  (2)字符串数组的赋值
  例如:
  main()
  {
  char s[30];
  strcpy(s, "Good News!"); /*给数组赋字符串*/
  .
  .
  .
  }
  上面程序在编译时, 遇到char s[30]这条语句时, 编译程序会在内存的某处留出连续30个字节的区域, 并将第一个字节的地址赋给s。当遇到strcpy( strcpy 为Turbo C2.0的函数)时, 首先在目标文件的某处建立一个"Good News!\0" 的字符串。其中\0表示字符串终止, 终止符是编译时自动加上的, 然后一个字符一个字符地复制到s所指的内存区域。因此定义字符串数组时, 其元素个数至少应该比字符串的长度多1。 [NextPage]   注意:
  1. 字符串数组不能用"="直接赋值, 即s="Good News!"是不合法的。所以应分清字符串数组和字符串指针的不同赋值方法。
  2. 对于长字符串, Turbo C2.0允许使用下述方法:
  例如:
  main()
  {
  char s[100];
  strcpy(s, "The writer would like to thank you for"
  "your interest in his book. He hopes you"
  "can get some helps from the book.");
  .
  .
  .
  }
  (3)指针数组赋值
  例如:
  main()
  {
  char *f[2];
  int *a[2];
  f[0]="thank you"; /*给字符型数组指针变量赋值*/
  f[1]="Good Morning";
  *a[0]=1, *a[1]=-11; /*给整型数数组指针变量赋值*/
  .
  .
  .
  }
  三、数组与指针
  数组与指针有密切的联系。数组名本身就是该数组的指针, 反过来, 也可以把指针看成一个数组, 数组名和指针实质上都是地址, 但是指针是变量, 可以作运算。而数组名是常量, 不能进行运算。
  例如:
  main()
  {
  char s[30], *p; /*定义字符型数组和指针变量*/
  p=s; /*指针p指向数组s的第一个元素s[0]的地址*/
  .
  .
  .
  *(p+8); /*指针p指向数组s的第9个元素s[8]的地址*/
  .
  .
  .
  }
  由上例可以看出数组和指针有如下关系:
  (p+i)=&(s[i])
  *(p+i)=s[i]
  因此, 利用上述表达式可以对数组和指针进行互换。两者的区别仅在于: 数组s是程序自动为它分配了所需的存储空间; 而指针p则是利用动态分想函数为它分配存储空间或赋给它一个已分配的空间地址。
  5. 运算符
  Turbo C的运算符非常丰富, 主要分为三大类: 算术运算符, 关系运算符与逻辑运算符, 按位运算符。除此之外, 还有一些用于完成特殊任务的运算符。下面分别进行介绍。
  5.1 算术运算符
  Turbo C的算术运算符如下:
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  操作符 作用
  ────────────────────────────
  + 加, 一目取正
  - 减, 一目取负
  * 乘
  / 除
  % 取模
  -- 减1
  ++ 加1
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  一、一目和二目操作
  一目操作是指对一个操作数进行操作。例如: -a是对a进行一目负操作。
  二目操作(或多目操作)是指两个操作数(或多个操作数)进行操作。
  在Turbo C中加、减、乘、除、取模的运算与其它高级语言相同。需要注意的是除法和取模运算。
  例如:
  15/2 是15除以2商的整数部分7
  15%2 是15除以2的余数部分1
  对于取模运算符"%", 不能用于浮点数。
  另外, 由于Turbo C中字符型数会自动地转换成整型数, 因此字符型数也可以参加二目运算。
  例如:
  main()
  {
  char m, n; /*定义字符型变量*/
  m='c'; /*给m赋小写字母'c'*/
  n=m+'A'-'a'; /*将c中的小写字母变成大写字母'B'后赋给n*/
  ...
  }
  上例中m='c'即m=98, 由于字母A和a的ASCII码值分别为65和97。这样可以将小写字母变成大写字母, 反之, 如果要将大写字母变成小写字母, 则用c+ 'a' -'A'进行计算。
  二、增量运算
  在Turbo C中有两个很有用的运算符, 在其它高级语言中通常没有。这两个运算符就是增1和减1运算符"++"和"--", 运算符"++"是操作数加1, 而"--" 则是操作数减1。
  例如:
  x=x+1 可写成x++, 或++x
  x=x-1 可写成x--, 或--x
  x++(x--)与++x(--x)在上例中没有什么区别, 但x=m++和x=++m却有很大差别。
  x=m++ 表示将m的值赋给x后, m加1。
  x=++m 表示m先加1后, 再将新值赋给x。
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved