C语言复习

GNU C变量名可以用$符号

C89关键字:

auto  break  case  char  const continue  default  do  double else  enum  extern float  for  goto if  int long register return short signed sizeof  static struct switch  typedef union  unsigned void volatile while

C99添加的关键字:

inline _Bool_Complex_Imaginary

GNU扩展:

__FUNCTION__  __PRETTY_FUNCTION__  __alignof __alignof__ __asm  __asm__ __attribute  __attribute__  __builtin_offsetof __builtin_va_arg  __complex __complex__ (复数) __const  __extension__  __func__ __imag  __imag__(虚部)  __inline __inline__  __label__ __null  __real __real__(实部)  __restrict  __restrict__ __signed  __signed__  __thread __typeof  __volatile  __volatile__

 

 

__cmplex__ float a=4+3i;

float b=__real__ a;4

float c= __imag__a;3

 常量类型:

整型常量、字符型常量、实型常量、字符串常量

整型常量:0x或0X开头代表16进制,以0开头代表8进制,其他为10进制;可以在整型常数后面加u/U表示无符号整数,加l/L表示长整形,可以两个一起加表示无符号长整形,同时加两个LL表示long long类型整数,如:45ULL.(建议用大写的)

字符常量:用单引号括起来的单个字符都是字符常量,但特殊的需要\(反斜线)转义,如:\\  \?  \’  \”  \a(响)  \b(退格)  \e(ESC) \f  \n(换行)  \r (回车)  \t(水平Table键)  \v(垂直Table键)  \o,\oo,\ooo(八进制) \xh,\xhh,\xhhh ……(十六进制),使用8进制或16进制的字符常量最好在256内,否则会发生编译时错误。

实型常量:可以省略整数或小数部分,但不能都省略,实型可以有e或E表示10的次方,幂可正可负,如:

double x,y;

x=5e2;// x=5*100,即500.0;

y=5e-2;//y=5*(1/100)即0.05;

实型默认是double,后面接f/F表float,接l/L表示long double类型.

字符串常量:

“tutti” “frutti” “ ice” “cream” 会自动等价于“tuttifrutti ice cream”,字符串太长可以用\;其实字符串常量可以自动调整:

“This is a test “

“sentence”

等价于:

“This is a test \

sentence”

enum枚举类型,第一种类型默认为0,还可以这样:

enum fruit{kumquat,raspberry,peach,plum=peach+2};plum是4

当声明一个union变量时可以初始化第一个成员:

union numbers{

         inti;

         floatf;

};

union numbers i_f={5};

也可以特定指定初始化哪个成员:union numbers i_f={f:3.1415};

或union numbers i_f={f=3.1415};

初始化结构体:

struct point

{

         intx,y;

};

struct point fist_point={5,10};// x被初始化为5,y为10

也可以这样初始化结构体:

struct point fist_point={.y=10,.x=5};

struct point fist_point={x:5,y:10};

当初始化数据少于结构体成员个数时,没初始化的使用默认值

位域:用来定义特定位大小的结构体如:

struct card{

         unsignedint suit:2;

         unsignedint face_value:4;

};

结构体域被分成两部分,第一部分占2位,第二部分占4位,suit取值范围为0~3,face_value取值范围为0~15;域名可以为符号整型,也可以为无符号整型。

结构体可以没有成员,此时结构体大小为0;

数组:GNU可以声明一个大小为0的数组,用来指示地址,不占空间,如:

struct line

{

         intlength;

         charcontent[0];

};

{

struct line *this_line=(struct line*)malloc(sizeof(structline)+this_length);

this_line->length=this_length;

}

定义了一个可变长度的空间。

GNU扩展可以用变量指定数组大小,如:

int my_function(int number){intmy_array[number];}

数组初始化,可以初始化一部分,余下的为0:

int my_array[5]={1,2,3};

int my_array[5]={[2] 5,[4] 9};

int my_array[5]={[2]=5,[4]=9};

还可以用[first]…[last]指定初始化范围:

int my_array[100]={[0 … 9]=1,[10 …98]=2,3};//0~9初始化为1,10~98初始化为2,99为3。注意在…两端都有空格。

当数组声明时元素都初始化时,可以不指定大小:

int my_array[]={1,2,3,4,5};//数组大小为5,

如果只初始化部分元素,未指定数组大小时,数组大小为最大初始化的下标:

Int my_array[]={0,1,2,3,4,[99]=99};//数组大小为100、

数组初始化时超过指定大小会发生内存溢出

按位与和按位或,按位异或只能用于整数,取反操作只能用于无符号数。

取函数地址可以如下:

 extern int foo(void);

int (*fp)(void)=foo;//fp指向foo函数

int (*fp2)(void)=&foo;//fp2也指向foo函数

可以通过&&取标号的地址

sizeof用法:size_t是一个无符号整型,定义在stddef.h

 

size_t a=sizeof(int);

size_t a=sizeof(ifloat);

size_t a=sizeof(5);

size_t a=sizeof(3.13);

size_t a=sizeof a;

 

在一个表达式中一个变量的值只能修改一次,被赋值的变量在表达式中应该是只读的。

goto 不能跳到别的函数里面。

可以用通过&&符号来取标号的地址,其类型为void*,然后可以用goto到这个地址:

传递结构体类型的参数给函数时,最好传递指针类型的结构体,除非你故意浪费内存。

函数的可变参数至少有一个形参,使用如下:

#include<stdarg.h>

int add_multiple_values(int number, … )

{

         intcounter,total=0;

         intfirst_val;

         va_listparameters;

         va_start(parameters,number);

/*取出第一个不定参数,这里即number后面的第一个参数,

循环调用可以依次取出所有参数*/

         first_val=va_arg(parameters,int);

         va_end(parameters);//销毁

}

main 函数的完整形式:

int main(int argc,void * argv[])

{}

第一个参数为传递参数个数,argv[0]指向程序名。

函数定义嵌套:

一个函数里面可以定义一个函数,但必须在外函数变量声明的地方,即函数的最开始处,例子如下:

int function(int x)

{

         intinner_function(int a,int b)

         {

                   if(a<b)

{       

         return b;

}

else{

         return a;

}

}

returninner_function(x,2);

}

 

C语言规范:

.h文件作为头文件一般放变量和函数的声明,不该有任何定义。.c文件作为资源文件一般用于具体定义,也可以声明。

变量和函数的声明最好在文件的开头。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值