(今天我们继续来学习指针,讲完这章后估计有同学会问?指针这就结束了吗?其实不是,这篇文章只是让大家初步了解指针,可以看懂代码,并自己可以写出一些简单的代码,并不需要过度深究,复杂的我们以后再学。)
指针:
在讲指针之前我们先来介绍一下内存:
1.内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
2.所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是
1个字节。
3.为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该
内存单元的地址。
变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。
那么如何取出变量中的地址呢?
举例:
#include <stdio.h>
int
main
()
{
int
num
=
10
;
&
num
;
//
取出
num
的地址
//
注:这里
num
的
4
个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
printf
(
"%p\n"
,
&
num
);
//
打印地址,
%p
是以地址的形式打印
return
0
;
那么我们取出地址后,如何
储存变量的地址
呢?这又引出来一个概念:
指针变量。
理解记忆:(先牢记:指针就是地址,指针变量也就是地址变量。像生活中也有地址嘛,门牌号,单元号啥的,知道了你的地址才能迅速找到你,C语言中这么多数据如何精准定位某个数据呢,这时候也需要知道某个数据的地址,C语言中数据的地址就是地址编号嘛,不要把指针想得过于复杂,他就是一个数据的地址嘛。)
先看这个例子:
int
main
()
{
int
num
=
10
;
1
int *
p
= &
num
;
2
return
0
;
解释:第1行,我们定义了一个
整形变量num,
第2行。等号右边的内容我们取出了num的地址,等号左边的内容我们
定义一个指针变量来存放num的地址,这个整形指针变量的类型是int *。这颗
星表明它是
指针,
int表明
指针所指向的数据为整形。
现在我们已经把num的地址给存起来了,那么我们
如何通过它的地址找到它
来想对他做出一些改变呢?接下来再看一个例子:
int
main
()
{
int
num
=
10
;
1
int *
p
= &
num
;
2
*p=20; 3
return
0
;
第三行这个
*
是
解引用操作符
的意思,它的作用是
通过地址找到储存的内容。
我们这里
*p=20
的意思就是通过num的地址找到它,把它的值修改成20,这时候num的值就成20了。
下面是代码和运行结果:
指针的介绍就初步介绍到这里。
结构体:
结构体
是
C
语言中特别重要的知识点,结构体使得
C
语言有能力描述
复杂类型
。
那么我们怎样
引出结构体这个概念
的呢?我们生活中的
复杂数据
用其他类型根本无法描述,
比如描述
学生
,学生包含:
名字
+
年龄
+
性别
+
学号
这几项信息。 这里只能使用
结构体
来描述了。
先看下面这行代码:
struct
Stu
{
char
name
[
20
];
//
名字
int
age
;
//
年龄
char
sex
[
5
];
//
性别
char
id
[
15
]
;
//
学号
};
解释:
struct是结构体关键字。struct Stu是你自己定义的类型。
接下来我们初始化一个结构体:
struct Stu s = {"张三", 20, "男", "6666“}
这个代码的意思是:定义了一个名字为s的结构体变量。
(大括号中的内容依次对应上述自定义中大括号的数据,这个也很好理解)
如何使用结构体变量呢?看下面这一行代码。
printf
(
"name = %s age = %d sex = %s id = %s\n"
,
s
.
name
,
s
.
age
,
s
.
sex
,
s
.
id
);
那个
点(.)
就是
结构体访问操作符
。(也很符合逻辑,不难理解)
对结构体的初级学习就到这里,后面我们会详细学习。