设为首页 加入收藏

TOP

C语言中基础小问题总结(一)
2013-10-14 09:07:35 来源: 作者: 【 】 浏览:713
Tags:言中 基础 问题 总结

  1、printf格式输出函数

  如果格式控制说明项数多于输出表列个数,则会输出错误数据;

  如果输出表列个数多于格式控制说明数,则多出数不被输出。

  %md,m指的是输出字段的宽度。如果输出字段位数小于m,则左端以空格补齐,若大于m,则按照实际位数输出。

  %-md,基本同上,只不过不同之处在于,空格在右端补齐

  printf参数可以是常量,变量或表达式,VC++ 6.0中采用从右向左顺序求值,从左向右输出如

  int x = 5;

  printf("%4d%4d%4d", x, ++x, ++x);

  输出的是7,7,6. 而不是5,6,7

  注意,不同的编译器可能输出不同结果,直接用gcc编译结果为7,7,7

  2、0-9数字转为字符

  数字为m,则m+'0'即为m的字符形式'm'

  3、小写字母变为大写字母

  char c; c为小写字母,则c-'a'+'A'即为对应的大写字母

  4、switch

  如果找到匹配的case入口,则执行后面的语句,执行完语句之后,并不像if语句那样退出,如果没有遇到break语句,将逐条执行后面所有的case语句,不再进行条件判断。

  case入口后面的语句可以是一句,也可以是多句,并且不需要大括号。

  5、字符数组存储字符串

  当char str =new {"china"};时,程序会出问题,输出的时候会在china后带乱码,这是因为china字符串后还有一位'\0',因此应该给str数组多一位。即char str =new {"china"};

  且'\0'只表示字符串的结束,并不会输出。

  scanf("%s",str);不能存入空格,因为认为空格代表字符串的结束。gets(str);可以在字符串中间加入空格。

  puts(str);在输出字符串后自动加入换行

  6、字符串操作函数

  字符串拷贝函数:strcy(str1,str2); 将字符串str2拷贝到str1中。

  字符串连接函数:strcat(str1,str2); 将str2连同'\0'一起连接到str1的最后一个字符(非'\0')后面,结果放在str1中。

  字符串比较函数:strcmp(str1,str2); 比较str1和str2的大小,如果str1==str2,则返回0;如果str1>str2,则返回正整数;如果str1<str2,则返回负整数。

  字符串长度函数:strlen(str); 返回字符串str的实际长度,不包括末尾的'\0'.

  7、函数的参数和单向值传递

  函数的参数分为实参和形参。形参出现在函数定义中,在整个函数体中使用,离开函数体则不能使用。实参出现在主调函数中,进入被调函数后,实参不能被使用。

  形参只有被调用时才被编译系统分配内存单元,在调用结束时候,编译系统即刻释放所分配的内存单元,因此形参只在函数内部有效,函数调用结束返回主调函数后则不能再使用;

  单向传值:只能把实参的值传递给形参,不能把形参的值反向传递给实参,叫做单向值传递。

  因此,函数调用过程中,形参的值发生改变,实参的值不会改变

  8、数组作为参数

  数组名可以作为函数实参,这时候形参可以是数组或者指针。且形参是一维数组时候可以不指定长度。形参是二维数组时候,第一维大小可以省略,要指定第二维的大小。

  9、变量的存储方式

  (1)局部变量

  局部变量在每次函数调用时,系统会在内存的动态存储区为他们重新分配内存单元,随着函数的频繁调用,某个变量的存储位置会随着程序的运行不断变化,所以未赋值的局部变量的值是不确定的。函数中的局部变量不能作为返回值,因为函数结束后,局部变量要被回收。

  (2)static类型

  静态变量在编译的时候被分配内存、赋初值,并且只会被赋初值一次。未赋初值的静态变量,系统自动赋初值0(或'0')。静态变量在内存静态存储区占用固定的内存单元。即使它所在的函数调用结束,也不会释放存储单元,其值也会继续保留,下次调用,会继续使用该值。静态变量分为静态局部变量和静态全局变量,静态全局变量就是定义在函数体外的静态变量,静态局部变量就是定义在函数体内的静态变量。

  如下:

  #include<stdio.h>

  void f()

  {

  static int a=0; //编译时被赋初值,且整个过程只被赋初值一次

  ++a;

  printf("%-2d",a);

  }

  main()

  {

  f();

  f();

  f();

  }

  以上程序的输出结果为1 2 3

  因为对static变量赋初值是在编译时完成,而且只赋值一次,之后在调用函数不会执行赋初值操作,因此输出1 2 3 ;若去掉static关键字,那么结果就会变为1 1 1 ;由此看出,函数反复调用多次,局部变量每次都会被赋初值,而静态变量只是在第一次被调用的时候赋初值。

  此处特变注意:java中是没有静态局部变量的,只会有针对类的静态全局变量。

  (3)寄存器类型

  定义形式: register 数据类型 变量名;寄存器类型局部变量的作用域、生存期与局部变量相同。

  寄存器的个数有限,寄存器的存储数据位数有限,所以寄存器类型的变量不能太多,而且有整型变量和字符型变量才能被定义为寄存器类型的局部变量。现在的优化系统可以自动的判断把相关变量存到寄存器中。

  (4)外部变量

  10、编译预处理

  #include<文件名>和#include"文件名"的区别是:使用尖括号时,编译预处理程序只在系统指定的文件夹中寻找;而使用双引号,编译预处理程序首先在当前文件所在的文件夹中寻找,如果找不到,则在系统指定的文件夹中再寻找。

     

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言define用法详解 下一篇C语言陷阱:浮点运算

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: