1.数据类型的长度
#include<stdio.h>
int main()
{
printf("%d\n",sizeof(int));//4
printf("%d\n",sizeof(char));//1
printf("%d\n",sizeof(float));//4
printf("%d\n",sizeof(double));//8
printf("%d\n",sizeof(long double));//16
printf("%d\n",sizeof(short));//2
printf("%d\n",sizeof(long));//4
printf("%d\n",sizeof(long long));//8
return 0;
}
注意:不同编译器可能测试结果不同
2.字符串数组
#include<stdio.h>
int main()
{
char arr1[]="abc";
char arr3[]={'a','b','c','\0'};
printf("%s\n",arr1);
printf("%s\n",arr3);
return 0;
}
打印结果:abc
#include<stdio.h>
int main()
{
char arr2[]={'a','b','c'};
printf("%s\n",arr2);
return 0;
}
打印结果: abc9?
解释:arr1写法默认有\0结尾,所以可以正常输出,arr3写法有在最后添加\0,所以也可以正常输出,arr2写法却没有输出\0,所以在输出完abc后没有停止输出,最后在abc后输出了些乱码
3.强制规定数据长度
#include<stdio.h>
int main()
{
int n=0;
scanf("%2d",&n);
printf("%4d\n",n);
printf("%-4d\n",n);
return 0;
}
输入时规定只读入2个长度的数据,后面无论输入多少数据都不理会,输出时规定读取4个长度的数据,我们在前面空两个长度的位置,如果是-4个长度,则是在后面空两个长度的位置
4.char与int的奇妙关系
#include<stdio.h>
int main()
{
char a='A';
printf("%c\n",a);
printf("%d\n",a);
int b=65;
printf("%d\n",b);
printf("%c\n",b);
return 0;
}
如果把字符用%c输出,那么就输出原样字符。如果把字符用%d输出,那么就会输出该字符对应的ASCII值(数字,整型)。
反之,如果把数字用%d输出,那么就输出原样数字。如果把数字用%c输出,那么就会输出该数字对应的ASCII值中对应的字符(字符型)。
5.保留小数点后几位
(1)double
#include<stdio.h>
int main()
{
double n=11111.234;
printf("%.1lf\n",n);
printf("%.2lf\n",n);
printf("%.3lf\n",n);
printf("%lf\n",n);
return 0;
}
6.关键词static
(1)修饰局部变量
#include<stdio.h>
void test()
{
int i=0;
i++;
printf("%d",i);
}
int main()
{
int i=0;
for(i=0;i<5;i++)
{
test();
}
return 0;
}
打印结果:1111
#include<stdio.h>
void test()
{
static int i=0;
i++;
printf("%d",i);
}
int main()
{
int i=0;
for(i=0;i<5;i++)
{
test();
}
return 0;
}
打印结果:12345
导致以上两种输出差别的是关键字static,static意为“静止的”,表示我们把test()函数内的局部变量i赋予了其静态性(就是直到整个程序结束才会释放),所以每次执行完test()内的操作后,变量i的值会被保存下来,并且仅在这个函数内初始化一次(后面不会再被初始化)。在未赋予其静态性前,这个局部变量i只要一出test()函数就会被释放掉。
(2)修饰全局变量/函数
在实际项目中,一个工程中会有至少一个源文件(xxx.c)。当一个全局变量被static修饰,这个全局变量就只能在本源文件内使用,不能在其他源文件内使用。(函数同理)
7.结构体的访问
#include<stdio.h>
struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[15];//学号
};
int main()
{
//打印结构体信息
struct Stu s={"张三",20,"男","20180101" };
//.为结构体成员访问操作符
printf("name=%s,age=%d,sex=%s,id=%s\n",s.name,s.age,s.sex,s.id);
//->操作符
struct Stu *ps=&s;
printf("name=%s,age=%d,sex=%s,id=%s\n",ps->name,ps->age,ps->sex,ps->id);
return 0;
}
变量访问结构体用".",指针访问结构体用“->”