今天是重新学习C语言的第三天,我想着,博客不仅用来分享我每日的学习成果,每天关于我的规划和思考也可以写进来,第三天我把C语言的基础部分都过了一遍,也算是简单复习了下,接下来就要开始真正到点的学习了,目前的进度个人感觉还可以接受,争取在寒假结束前完成进阶。目前的状态是对我的未来挺迷茫的,但是对于近段时间的规划和方向是精确的,希望量变可以引起质变,加油!
关键字
关键字不能做变量
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
auto 是自动的 - 每个局部变量都是auto修饰的,省略掉了
break 循环顺序跳出
const 修饰常变量
enum 枚举
extern 用来声明外部符号
register 寄存器关键字
signed 有符号的
sizeof 求大小
static 静态的(后学)
void 无,空
volatile 暂时不学(必学)
define/include 预处理指令,不是关键字
typedef 类型重定义
typedef unsigned int u_int;
int main()
{
unsigned int num = 100;
u_int num2 = 100;
return 0;
}
static - 静态的
1.修饰局部变量:本质上改变了变量的存储类型,所以改变了生命周期
void test()
{
static int a = 1; //出范围a不销毁
a++;
printf("%d", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
2.修饰全局变量
全局变量在整个工程中都可以使用,只需extern声明
static修饰了全局变量,会使得全局变量只能在自己所在的源文件(.c)内使用
全局变量在其它源文件可以使用,是因为有外部链接属性,但是被static修饰后,就变成了内部链接属性,其它源文件就链接不到了
3.修饰函数
同全局变量相似
常量与宏
define是一个预处理指令
//define定义标识符常量 #define MAX 1000
//define定义宏
#define ADD(x, y) ((x)+(y))
#include<stdio.h>
int main()
{
int sum = ADD(2, 3);
printf("sum = %d\n", sum);
sum = 10*ADD(2, 3);
printf("sum = %d\n", sum);
return 0;
}
指针
32位 - 32根地址线 - 物理线 - 通电 - 1/0
一个内存单元是一个字节
取地址&a - 取到的是第一个字节的地址
printf("%p\n"&a); %p专门用来打印地址
int * pa = &a; // pa叫指针变量,专门用来存放地址
// * 说明pa是指针变量,int说明pa指向的对象是int类型
#include<stdio.h>
int main()
{
int num = 10;
int *p = &num
*p = 20; //*解引用操作 *pa就是通过pa里面的地址找到num
return 0;
}
#include //指针变量的大小取决于地址的大小
//32位平台下地址是32个bit位(即4个字节)
//64位平台下地址是64个bit位(即8个字节)
int main()
{
printf("%d\n", sizeof(char *));
printf("%d\n", sizeof(short *));
printf("%d\n", sizeof(int *));
printf("%d\n", sizeof(double *));
return 0;
}
结构体
struct Stu
{
char name[20];//名字
int age; //年龄
double score //成绩
};
//打印结构体信息
struct Stu s = {"张三", 20, "85.5"};
//为结构成员访问操作符
printf("name = %s age = %d score = %lf\n", s.name, s.age, s.score);
以下是给了指针的打印方法
//->操作符
struct Stu *ps = &s;
printf("%s %d %lf\n",(*ps).name,(*ps).age,(*ps).score)
printf(" %s %d %lf\n", ps->name, ps->age, ps->score);