初识C语言
- 什么是C语言
- 第一个C语言程序
- 数据类型
- 变量、常量
- 字符串+转义字符+注释
- 选择语句
- 循环语句
- 函数
- 数组
- 操作符
- 常见关键字
//以上是前两节的内容,想看的小伙伴们可以去我的主页哈!
目录
初识C语言
11.2 关键字static
11.2.1 修饰局部变量
11.2.2 修饰全局变量
11.2.3 修饰函数
12. #define 定义常量和宏
13. 指针
13.1 内存
13.2 指针变量的大小
14. 结构体
11.1 关键字 typedef
typedef 顾名思义是类型定义,这里应该理解为类型重命名。
比如:
上述两个式子是一样的哈!
11.2 关键字static
在
C
语言中:
static
是用来修饰:
1. 修饰局部变量
2. 修饰全局变量
3. 修饰函数
11.2.1 修饰局部变量
//
代码
1
#include <stdio.h>
void
test
()
{
int
i
=
0;
i
++
;
printf
(
"%d ", i);
}
int
main
()
{
int
i
=
0
;
for
(
i
=
0
;
i
<
10
;
i
++
)
{
test
();
}
return
0
;
}
//
代码
2
#include <stdio.h>
void
test
()
{
//static
修饰局部变量
static
int
i
=
0
;
i
++
;
printf
(
"%d "
,
i
);
}
int
main
()
{
int
i
=
0
;
for
(
i
=
0
;
i
<
10
;
i
++
)
{
test
();
}
return
0
;
}
即第一次使用后后面就没有再用了
这里就再牵扯到内存了(先简单提一下):
(其中只是举了些例子,并不是这有这些,而且也不止是只有这三个区,只是主要是这三个哈!)
程序从test.c到test.exe的过程
对于上图:告诉我们static在修饰局部变量的时候是在编译就完成了的,即在程序运行之前。
对比代码1和代码2的效果理解static修饰局部变量的意义。
结论:
static
修饰局部变量改变了变量的生命周期
让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
11.2.2 修饰全局变量
//
代码
1
//add.c
int
g_val
=
2018
;
//test.c
int
main
()
{
printf
(
"%d\\n"
,
g_val
);
return
0
;
}
//
代码
2
//add.c
static
int
g_val
=
2018
;
//test.c
int
main
()
{
printf
(
"%d\\n"
,
g_val
);
return
0
;
}
//上述的add.c 和test.c是指两个不同的源文件
代码
1
正常,代码
2
在编译的时候会出现连接性错误。
结论:
一个全局变量被
static
修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使
用。
这里就要再提到 extern 这个关键字,再使用不同源文件的内容的时候,要在想使用另一个源文件内容的源文件里面进行声明(如下用extern),但是如果另一个源文件那个想要使用的内容被static修饰的话,就算声明也是没有用的(即不能使用)。(如下图)
PS(static修饰全局变量):
1.生命周期还是不变,储存位置也不变,因为还是在静态区, 只是 从全局变量变为了静态变量(都在静态区)
2.静态变量只能在自己的源文件内部使用
11.2.3 修饰函数
//static修饰函数与修饰全局变量是相似的
//
代码
1
//add.c
int
Add
(
int
x
,
int
y
)
{
return
c
+
y
;
}
//test.c
int
main
()
{
printf
(
"%d\\n"
,
Add
(
2
,
3
));
return
0
;
}
//
代码
2
//add.c
static
int
Add
(
int
x
,
int
y
)
{
return
c
+
y
;
}
//test.c
int
main
()
{
printf
(
"%d\\n"
,
Add
(
2
,
3
));
return
0
;
}
代码
1
正常,代码
2
在编译的时候会出现连接性错误.
结论:
一个函数被
static
修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。
剩余关键字后续课程中陆续会讲解
12. #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
;
}
与函数差不多,各有优缺点,后面会讲
13. 指针
//对于指针,有很多人一听到就会怕,其实指针也没有那么恐怖,而且现在还是在"初识C语言"中,只会让大家对于这些东西有一个大体的了解,所以大家干就完了=。=!
13.1 内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是
1
个字节
。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该
内存单元的地
址
。
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
取出变量地址如下:
#include <stdio.h>
int
main
()
{
int
num
=
10
;
&
num
;
//
取出
num
的地址
//
注:这里
num
的
4
个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
printf
(
"%p\\n"
,
&
num
);
//
打印地址,
%p
是以地址的形式打印
return
0
;
}
PS:
地址存放是16进制的
那地址如何存储,需要定义指针变量。
int
num
=
10
;
int *
p
;
//p
为一个整形指针变量
p
= &
num
;
指针的使用实例:
#include <stdio.h>
int
main
()
{
int
num
=
10
;
int *
p
= &
num
;
*
p
=
20
;
return
0
;
}
//这里num本来是10,*p就是相当于num,即结果就是num等于20。
以整形指针举例,可以推广
#include <stdio.h>
int
main
()
{
char
ch
=
'w'
;
char*
pc
= &
ch
;
*
pc
=
'q'
;
printf
(
"%c\\n"
,
ch
);
return
0
;
}
//这里ch为原来的'w',改为了'q'。
PS:对于指针变量的用法 (存放地址是为了以后要用的时候通过p去访问a,或者改变a)
我们把地址也称为指针 这个变量(如p)是用来存放地址的也是用来存放指针的所以也称为指针变量,当你在使用指针变量的时候其实是在使用里面的地址(如a)
总结:指针就是地址,地址也被称为指针,当指针(或地址)要被存起来的时候,这个变量就被称为指针变量,这个指针变量就是用来存放地址的(存放别人的地址)(在指针变量的眼里所有的东西都是地址,只要你把一个东西存进去,他就会把他当做地址)
13.2 指针变量的大小
#include <stdio.h>
//
指针变量的大小取决于地址的大小
//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
;
}
结论
:指针大小在
32
位平台是
4
个字节,64位平台是
8
个字节。
//这个大小就没啥好说的哈,大伙记住就行。
14. 结构体
结构体是
C
语言中特别重要的知识点,结构体使得
C
语言有能力描述复杂类型。
比如描述学生,学生包含:
名字
+
年龄
+
性别
+
学号
这几项信息。
这里只能使用结构体来描述了。
例如:
struct
Stu
{
char
name
[
20
];
//
名字
int
age
;
//
年龄
char
sex
[
5
];
//
性别
char
id
[
15
]
;
//
学号
};
结构体的初始化:
//
打印结构体信息
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
);
(也是先让大家了解结构体哈!,不懂完全没有问题=。=!)
本章完!!!
接下来就会按照"初识C语言"中的内容逐个详解!!!
让大家更好地去体会C语言的魅力!!!
如果我的文章对大家有帮助的话,请来个点赞加关注吧!
当然要是有什么不对的地方,欢迎大家在评论区斧正!
让我们一起加油吧!!!!!