2017.9.16
一、 第一个C程序。常量及变量
main 入口主函数。EXIT终止程序
printf 格式化输出。
转义字符。/000,/x00
ASC2码 a为97,A为65,‘\0’为0。最大为256,对应char的内存大小。
strlen,求字符串长度
“%dn”,"abc"
sizeof,计算变量大小
sizeof(long),4-32,8-64
数据类型的作用?
1,表示变量的空间。
2,各类型开辟空间的方式不同。
常量分为 字面常量,const常量,define定义的标识符常量,枚举常量。
变量 字母下划线开头,last_name或Lastname
关键字需要注意typedef,volatile,stuct,union,enum.
I\O函数:
int getchar()等待输入字符,获取ASC码值。
scanf(),放入缓冲区,不看目标空间大小,scanf拿\0之前的字符,\0有时getchar拿。
printf(),连接操作系统,也有缓冲区,提高工作效率。
100-200间素数使用试除法,改进,num=101,num+=2,,,if ,i<=sqrt(num).
关键字
register,数据在电脑种由下往上存储顺序为,网盘-硬盘-内存-缓冲区-寄存器。
const,const后是什么形式,形式不能改变,除非改变指针或者改变指针里的值,const int num=1,const int *num=1。
volatile,只要内存发生变化直接从内存中取值。在c++环境下,const int num直接被放入寄存器,此时volatile const int num为了保证内存可见性,将内存赋的新值给予num。
局部变量、全局变量
全局变量:作用域从文件开始到文件结束,生命周期整个工程,加extern可以被其他源文件引用。
局部变量:生命周期为函数括号内,作用域为整个函数,{int a=1;}。
static,修饰局部变量时,static int a可以跑出函数外执行,不被销毁,延迟生命周期,修饰全局变量时,static int a不能被其他源文件引用。
printf返回字符的个数,当printf嵌套使用时,printf("%d",printf("%d",printf(%d,43))),输出字符的个数,4321.
二、 分支语句结构介绍
if语句注意点
1.if
if
全范围,判断2次
if
else if
小范围,判断1次
2.else跟最近的if匹配。
3.sizeof(arr1)/sizeof(arr1[0])求数组元素个数。
4.if(flag)判断真假,非0为真,0为假。
5.int*ptr=NULL //初始化指针
if(ptr!=NULL)
写出指针就要给初始化。
6.浮点数内存存储,float共64位,小数位52位。
需要声明精度,和0比较时进行精度判断,
switch语句注意点
1.case为入口,break为分支。
2.switch()参数后应该为整形。
case'a'为ASC码值。
前段时间由于其他事影响导致未能及时更新,现在开始,继续记录!
三、 操作符及表达式
1.算术操作符
‘/’计算求浮点数时要求两个操作数最少有一个浮点数。
‘%’只能计算整数。
2.移位操作符
不改变原变量值。
右移分为算术右移,逻辑右移。
在做乘二或除二运算时,可以使用移位,好处:效率高!
3.位操作
按位与,按位或,按位异或
4.赋值操作符
可连续赋值:x=y=a;
复合赋值例如:+=符号;
5.单目操作符
例如: + - sizeof ~(按位取反) ++ *(解引用) 等等
sizeof:
short s=0;
int a=2;
printf("%d',sizeof(s=a+3));//2
printf("%d",s)//0
其中sizeof在编译期间就求值了,而创建变量在运行期间才开辟空间,所以sizeof已经运算完,a+3算出的值无用。上式所以为2.
sizeof(arr)和&arr中,arr表示数组,其他地方都表示数组首元素的首地址.
*:
int *p=&p;//上式的*和int一体,int*代表指针类型.
*p=20;//进行解引用.
6.关系操作符
>=<之类的操作符.
7.逻辑操作符
&&逻辑与,||逻辑或,判断表达式的真假.
例如:
a=0;b=2;c=3;d=4.
a++&&++b&&d++;
printf("%d%d%d%d",a,b,c,d)//1234
a++||++b||d++;
printf("%d%d%d%d",a,b,c,d)//1334
8.条件操作符(三目操作符)
exp1?exp2:exp3
b=a>5?3:-3;
9.逗号表达式
结构为最后一个表达式。
10.1.下标操作符‘[]’,2.函数调用操作符‘()',3.结构体成员访问操作符‘.’结构体指针对象‘箭头’
3.使用结构体成员访问操作符‘.’
typedef struct stu
{
char name[20];
int age;
char sex[7];
}; stu
int main()
{
stu s;
strcpy(s.name, "LG");
s.age = 20;
strcpy(s.sex, "male");
system("pause");
使用结构体指针对象‘箭头’
print(&s);
void print(stu *ps)
{
printf("%d\n",ps→age);
}
四、函数
1.嵌套函数
2.链式访问
定义:把函数的返回值作为某个函数的参数。
#ifndef _ADD_H_
3.链接属性
全局标识符都具有外部链接属性。
外部链接属性:在一个文件定义,可以在另一个文件调用。
一般链接错误为1.外部不存在2.打错函数名。
static void test():改为内部链接属性。
static修饰全局变量:改变链接属性,改变作用域。
修饰局部变量:改变存储类型,改变生命周期。
修饰函数:改变链接属性。
栈空间 存放局部变量和形参 出去就销毁。
堆空间 动态内存开辟 用完不销,易导致内存泄漏。
静态区 全局变量 生命周期不销毁,直到程序结束。
五、数组
1.数据类型分为内置类型和自定义类型。数组为自定义类型。
2.字符串节省内存,只存一次。
3.数组越界导致无限循环。
int i,arr[10]
for(i=0;i<12;i++)
{
printf();
arr[i]=0;
4.二维数组可以省略行,不省略列。
int*p=arr;//一维数组
int*p=&arr[0][0];//二维数组
二维数组输出1-12。
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
arr[i][j] = 4 * i + j + 1;
}
}
int arr[3][4] = { 0 };
for (i = 0; i < sizeof(arr) / sizeof(arr[0][0]); i++)
{
*(p + i) = i + 1;
}
上式两个循环体等价,第一个从一维角度分析采用下标法,第二个从二维角度分析,采用指针法。
5.二维数组内存中存储。int[][4],二维数组中arr指向数组,数组指针类型:int(*)[4]。
6.数组运算。
Linux基本操作
ls- 显示当前目录文件
cd文件\ 进入该文件
ls-l 首字母为d是目录
首字符为_是文件
pwd 路径
cd.. 返回上级目录
cd. 当前目录
mkdir 创建文件夹
touch文件 创建文件
gedit文件 编辑该文件
gcc文件 编译该文件
vim文件 编译该文件
./test.o 运行该文件
rm文件 删除该文件
gcc-E test.c-o test.i 预处理 在test.i处停下
gcc-S test.c-o test.s 编译
gcc-C test.c-o test.o 汇编
gcc-o mytest test.0 链接