C语言开发工具:
VC++ 6.0 ,Visual Studio Code ,dev C++
代码格式:
每条语句必须以 英文 分号结尾 “;”
主函数名字 main 不要写错。
符号一定要写成英文的。
一个项目至于一个main()
#include <stdio.h> // 引用头文件
int main(void){ //c99标准主函数
printf("第一个c程序");
return 0;
}
/*
int main(int args char* args[]){ //标准主函数 命令行
printf("第一个c程序");
return 0;
}
*/
注释:
单行注释:只注释//后面的这一行代码,被注释的这一行代码不会加入编译器编译。可以让代码更加方便的阅读。
多行注释: 注释 /* */" 之间的代码。如果有多个 */"遇到第一个就算注释结束,后面的代码不会注释,就会报错。
内建函数:有些编译器,对比较常用的函数,比如 printf();在不引用头文件时,也能正常编译运行。但有写开发工具不行。建议还是引用头文件。
整形 4个字节 c
sizeOf(int a ); //字节大小
有符号整形: -2^31 - 2^31-1
无符号整形: 0 - 2^32-1
输出无符号的整形
unsigned int a = 222;
printf("%u",a);
有符号短整型 short -2^15 2^15-1
无符号短整型 short 0 2^16-1
有符号长整型 long -2^31 - 2^31-1
无符号长整型 long 0 - 2^32-1
有符号长整型 long long -2^63 - 2^63-1
无符号长整型 long long 0 - 2^64-1
取地址: &a
输出地址 : printf("%#p",&a);
有#号地址输出会有前缀 0x
scanf 函数 输入函数
int a ,b;
scanf("%d%d",&a,&b); //在输入时用空格隔开,两个输入的字符串,必须使用取地址符号。
scanf("%d,%d",&a,&b);//在输入时用","隔开,两个输入的字符串,必须使用取地址符号。
b = a++ ; 的实际运行逻辑 :
int a = 10;
int b = 0;
b = a++; //先把a的值拷贝给一个变量C,a自增为11,再把c的值10赋值给b.
逗号表达式:
int a ;
int b ;
int c ;
c =(1,3,a=2,b=a); //c=2 最后一个值, b .
指针:一种数据类型,定义变量用的。指针类型变量装不同类型地址的。
基本数据类型的指针: char short ,int, long ,float double . 申明一个指针:
int *p;
char *c;
float *f;
指针指向空间:
int a = 19;
int *p = &a;
指针间接操作空间:
int a = 19;
int *p = &a;
//读
printf("%p,%d", a ,*p); //输出结果: 19, 19
//写
*p = 145;
printf("%p,%d",a,*p); //输出结果 145, 145
//取地址
printf("%p,%p ,%p",p,&*p,&a); //输出结果 0x11ff11, 0x11ff11,0x11ff11
double d = 123;
int *q = &d //不合法的操作。只操作4字节。
int b = 123;
double *s = &b //不合法的操作,一次性操作8字节。int只有4字节。
二级指针的意义:
int a =12;
int *p =&a;
int **p1 = &p; //2级指针 指针p的地址。
int ***p2 = &p1; //3级指针 指针p1的地址。
指针遍历一维数组:
int a[5] = {1,3,5,7,9};
int *p = &a[0];
int i = 0;
for(i = 0; i<5;i++){
printf("%d",p+i); //p的本身的值没有被覆盖了。
printf("%d",p++); //p的本身的值被覆盖了。
}
printf("%d",p);