C点滴记录(一)

C基础部分备忘

 

 

*强制类型转换得到所需类型的中间变量,原变量类型不变:

*++  -- 不能用于常量(因为常量值不可变)和表达式,属于单目运算符,结合方向自右向左

*在调用函数时,对于实参的求值顺序,ANSI并无规定,因编译器而异

*关系运算符的结合方向:自右向左。关系表达式的值只能是真或假

*优先级: ! >  &&  >  ||, ?:表达式去较高的类型

*位运算运算对象只能是整型或字符型数据,不能是实型数据

*break不能用于除循环语句和switch语句之外的任何语句

*变量存储类型:auto,register,static,extern

*形参属于局部变量

*extern关键字每个引用的函数都要加,extern用以说明程序级的变量

*变量的作用域:程序级,文件级,函数级,语句块级

*auto,register是动态变量,static是静态变量

*static变量所在的函数被调用结束后,也不释放存储单元,作用域外不可见

*局部静态变量值具有可继承性(如循环中变量的值为上次循环改变后的值)

*外部变量(extern)只能存放在内存的静态存储区,在整个程序的运行期间一直占用内存单  元

*register型变量个数受限,且不能为long,double,float型

*局部static具有全局寿命和局部可见性

*extern不是变量定义,可扩展外部变量的作用域

*外部函数是可被程序中的其它文件所调用的函数

*内部函数只能被本文件中其它函数调用,用static声明

*函数调用中的数组:实参用数组名,形参用数组定义,数组元素做函数参数属于值传递,数组名作函数参数是地址传递

*goto语句不能用整数做标号, 只能出现在goto坐在函数内,且唯一,只能加在可执行语句前

*宏定义可以嵌套,不可以递归,如:#define max max+10  错误

  #define width 80

  #define length width+40

    var = length*2;

   宏展开:var = 80 + 40*2;结果并非预期那样,因为#define句没有括号,宏定义中最好 加入括号

   可以用宏名代替字符串,当宏定义在一行中写不下,需要在下一行继续时,只需在最后一个字符后加一个“/”(注:第二行开始不要有空格,否则空格会被一起替换掉)

*宏名有效范围为定义命令之后到本源文件结束,除非用#undef命令终止宏名的作用域。

*宏定义中,双引号“”阔气的字符串内的子串和用户标识中的成分不替换

*#define S (r)  PI*r*r相当于S代表“(r)  PI*r*r”

  #define Power(x)  x*x 

    x = 4;y = 6;

    z = Power(x + y);宏展开:z = x + y * x + y;

  #define Power(x)  ((x) * (x))宏展开:z = ((x + y)*(x+y))

*include指令中“”引起的表示现在当前目录搜索,在搜索标准目录,目录可指定路径,<>引起的直接按便准目录搜索

*条件编译:#ifdef 标识符

                          程序段1

                   #else

                           程序段2

                   #endif

  若指定的标识符已经被#define定义过,则只编译程序段1,否则编译程序段2

  #ifndef 标识符

                程序段1

  #else

                 程序段2

  #endif

如果指定的标识符没被#define定义过,则编译程序段1,否则编译程序段2

  #if 表达式

              程序段1

  #else 

             程序段2

  #endif

  若指定的表达式为真,则编译程序段1,否则编译程序段2

*int i= 15;

  int data[i];

  这种写法是错误的,不能用变量定义数组维数

*数组不初始化,其元素值为随机数,对static数组元素不赋初值,系统会自动赋以0值

*int a[5] = {1,3,4} 

 等价于:a[0] = 1; a[1] = 3; a[2] = 4; a[3] = 0; a[4] = 0;

*当全部数组元素赋初值时,可不指定数组长度

*char str[] = "hello",存储为:h e l l o /0

  char str[] = {'h','e','l','l','o'},存储为:h e l l o

*int array[-100];错误

  float i = 3;

  a[i] = 10;错误

*char ch[5] = {'b','o','y'};存储为:b o y /0 /0

*main()

  {

     char str[5];

     scanf("%s",str);

     printf("%s",str);

  }

  用字符数组名时,不要加&,以空格或回车结束

  %s遇到/0结束,空格或者回车结束后,系统自动补/0

*puts函数输出完换行

*gets从键盘输入一个以回车结束的字符串放入字符数组中,并自动加'/0'

*strcat,strcpy返回字符数组第一个参数的首地址

*不能赋值语句为一个字符数组赋值,如:char str1[20],str2[20];  str1 = {"hello"}错误

  str2 = str1;错误

*strcmp(字符串1,字符串2)若1 < 2,返回负整数,若1>2,返回正整数,若1=2,返回0,字符串比较不能用==

*strlen返回字符串实际长度,不包括'/0',如:

  char s[10] = {'a','/0','b','c','/0','/0'};

  则 strlen(s) = 1

  char s[] = "/t/v///0will/n"

  strlen(s) = 3

  char s[] = "/x69/082/n"

  strlen(s) = 1

*用无名结构体直接定义变量只能用一次

*结构体类型不分配内存,不能赋值,存取或者运算;结构体变量则是分配内存,可以赋值,存取,以及运算

*结构体可以嵌套

*结构体变量不能整体引用,只能引用变量成员,可将一个结构体变量赋值给另一个同类型结构体变量

*共用体变量任何时刻只有一个成员存在

*共用体变量中起作用的是最后一次存放的成员

*不能再定义共用体变量时初始化,可用一个union为另个赋值

*typedef用自定义名字为已有数据类型命令,typedef tpye name

  typedef int INTEGER

*typedef定义类型,不能定义变量,没有创造出新数据类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值