(今天我们继续来学习指针,讲完这章后估计有同学会问?指针这就结束了吗?其实不是,这篇文章只是让大家初步了解指针,可以看懂代码,并自己可以写出一些简单的代码,并不需要过度深究,复杂的我们以后再学。)
指针:
在讲指针之前我们先来介绍一下内存:
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 );
那个 点(.) 就是 结构体访问操作符 。(也很符合逻辑,不难理解)
对结构体的初级学习就到这里,后面我们会详细学习。