C语言基础学习(Day7)
笔者有话说:通过前面的学习,我们学习了C语言的第一个重点——流程控制,以及C语言的第二个重点——函数,第七天我们主要学习C语言的灵魂——指针,想要学好C语言,一定要学好指针。由于指针非常重要,我们今天的学习内容相对较少,虽然内容较少但还是要认真学习才能掌握,笔者将继续用通俗易懂的语言带领小白15天掌握C语言基本知识,打卡第七天~
C语言的灵魂
指针(C语言的灵魂)
(1)引入
include <stdio.h>
int main(void)
{
int * p;
int i = 3;
p = &i;//ok
//p = i; //error 因为类型不一致,p只能存放int类型变量的地址,不能存放int类型的变量
//p = 55; //error 原因同上
return 0;
}
1、p是变量的名字,int *** 表示 p变量存放的是int类型变量的地址**;
2、int * p 不表示定义了一个名字叫做 *p 的变量,该理解为:p是变量名,p变量的类型是int * 类型 ;
3、所谓 int * 类型,实际上就是存放int变量地址的类型;
4、*p 就是以p的内容为地址的变量。
(2)p = &i;
1、p保存了i的地址,因此p指向i
2、p不是i,i也不是p
更准确的说:修改p的值不影响i的值,修改i的值也不影响p的值
3、如果一个指针变量指向了某个普通变量,则:
*指针变量 就完全等同于 普通变量
例子:
如果p是个指针变量,且p存放了普通变量i的地址,则p指向了普通变量
*p 就完全等同于 i
或者说:在所有出现 *p 的地方,都可以替换成 i ;在所有出现 i 的地方,都可以替换成 *p
#include <stdio.h>
int main(void)
{
int * p;
int i = 3;
int j = 5;
p = &i;
j = *p; //等价于 i = j;
//* p 就是以p的内容为地址的变量
printf("i = %d, j = %d\n", i, j, p);
return 0;
}
(3)指针和指针变量的区别
1、指针就是地址,地址就是指针;
2、地址就是内存单元的编号;
3、指针变量是存放地址的变量;
4、指针和指针变量是两个不同的概念(但是要注意,通常我们叙述时,会把指针变量简称为指针,实际它们的含义并不一样)。
(4)指针的重要性
1、通过指针可以表示一些复杂的数据结构
2、快速地传递数据
3、使函数返回一个以上的值
4、能直接访问硬件
5、能够方便处理字符串
6、使理解面向对象语言中引用的基础
总结:指针使C语言的灵魂
(5)指针的定义
1、地址:内存单元的编号;从0开始的非负整数
(对于32位机器)地址的范围:4G(0—4G-1)
若机器为32位,即有32跟地址线,可以控制2^32个单元(字节)
2^32B=2^30B*4=1G*4=4GB
机器内存条到底有多大 取决于硬件和软件的结合
2、指针:
指针就是地址,地址就是指针;
指针变量就是存放内存单元编号的变量,或者说指针变量就是存放地址的变量;
指针和指针变量是两个不同的概念(但是要注意,通常我们叙述时,会把指针变量简称为指针,实际它们的含义并不一样);
指针的本质就是一个操作受限的非负整数(指针【地址】只能相减,不能进行加、乘、除)。