未完持续
4.1
csb@csb-ThinkPad-E430c:~/code/c$ cat
float.c
#include
void main()
{
float a;
double b;
a=33333.333333333333333;//float,有效数字7位
b=33333.333333333333333;//double,有效位数16
printf("a=%f
b=%f
",a,b);
}
csb@csb-ThinkPad-E430c:~/code/c$
./float
a=33333.332031
b=33333.333333
字符常量
字符常量只能用单引号括起来,不能用双引号或其他括号
字符常量只能是单个字符不能是字符串
'5'!=5
枚举类型
定义枚举变量使其的取值被限定在一个有效范围;
enum name{
所有取值;
};
enum sgp_type{
SGP_QUICK=2,
SGP_READ=9,
SGP_CACHE=19,
SGP_WRITE=64,
};
void swap(int *p1,int *p2)
{
int *temp;
temp=p1;
p1=p2;
p2=temp;
}
指针作为函数参数
函数调用中发送的数据传送是单向的,只能吧实参的值传送给形参,而不能把形参的值反向传送给实参
下面例子具体说明这个问题:
#include
void swap(int *p1,int *p2)
{
int temp;
printf("swap:
addr:p1=%p,p2=%p
",p1,p2);
temp=(*p1);
*p1=*p2; *p2=temp;
printf("addr:
temp=%p,p1=%p,p2=%p
",&temp,&(*p1),&(*p2));//p1,p2指向的地址没改变,指向地址的内容变了
}
void swap1(int *p1,int *p2)
{
int *temp;
printf("swap1
addr:p1=%p,p2=%p
",p1,p2);
temp=p1;
p1=p2; p2=temp;
printf("addr:temp=%p,p1=%p,p2=%p
",&(*temp),&(*p1),&(*p2));//p1,p2是形参指向地址改变了,p3,p4是实参,指向地址没有改变
printf("value:temp=%d,p1=%d,p2=%d
",*temp,*p1,*p2);
}
void main()
{
int a=10,b=20;
int *p3,*p4;
p3=&a;
p4=&b;
printf("before swap
");
printf("a=%d,b=%d,a=%p,b=%p,p3=%p,p4=%p
",a,b,&a,&b,&(*p3),&(*p4));
swap(p3,p4);
printf("swap
a=%d,b=%d,a=%p,b=%p,p3=%p,p4=%p
",a,b,&a,&b,&(*p3),&(*p4));
*p3=10;
*p4=20;
swap1(p3,p4);
printf("swap1
a=%d,b=%d,a=%p,b=%p,p3=%p,p4=%p
",a,b,&a,&b,&(*p3),&(*p4));
}