手把手入门C语言—C语言指针

手把手入门C语言—C语言指针指针的长度指针初步练习指针的赋值练习加深指针的理解 总代码
指针前言 什么是指针?
1、指针用于存放地址
2、打印值*p
3、加深理解指针实验*p=123
指针的长度
指针的长度:打印各种指针的长度 , 所有指针的长度为4个字节
#include#include /**指针的长度 是4个字节(能够传任何类型的地址) */main(){int* iPoint;char* cPoint;printf("iPoint的长度=%d\n",sizeof(iPoint));printf("cPoint的长度=%d\n",sizeof(cPoint));system("pause");}
指针的深入理解 四个小实验 int i = 123;int* p; p = &i; 理解指针 1、指针和指针变量的关系
指针就是地址 , 地址就是指针
地址就是内存单元的编号
指针变量是存放地址的变量
指针和指针变量是两个不同的概念
但是要注意: 通常我们叙述时会把指针变量简称为指针 , 实际它们含义并不一样
指针里存的是100, 指针: 地址–具体
指针里存的是地址, 指针: 指针变量 – 可变
2、为什么要使用指针
指针的重要性
直接访问硬件 ( 显卡绘图)
快速传递数据(指针表示地址)
返回一个以上的值(返回一个数组或者结构体的指针)
表示复杂的数据结构(结构体)
方便处理字符串
指针有助于理解面向对象
3、*号的三种含义
*号的含义
数学运算符: 3 * 5
定义指针变量: int* p;
指针运算符(取值): *p (取p的内容(地址)在内存中的值)
指针初步练习
指针取值*p :把p变量对应的地址的值取出来
如图:
内存地址为16进制:1000H、2000H
代码示例:
#include #include /**指针就是内存地址 内存地址就是指针*/main(){// 定义一个int类型的变量 i ,并且赋值为 10;int i = 10;// 指针其实就是某种类型,在右上方有一个加号 // 定义一个int类型的一级指针变量 pint* p;// 把i对应的地址赋值给p变量 p = &i; // 指针取值*p :把p变量对应的地址的值取出来 printf("*p=%d\n",*p); system("pause");}
指针的赋值练习
添加如下代码:*p = 100; // 赋值
#include #include /**指针就是内存地址 内存地址就是指针*/main(){// 定义一个int类型的变量 i ,并且赋值为 10;int i = 10;// 指针其实就是某种类型,在右上方有一个加号 // 定义一个int类型的一级指针变量 pint* p;// 把i对应的地址赋值给p变量 p = &i; // 指针取值*p :把p变量对应的地址的值取出来 printf("*p=%d\n",*p); // 给指针 p 赋值,打印为 100 *p = 100; // 赋值 printf("*p=%d\n",*p); system("pause");}
如图可理解为:
当通过知道内存地址的值之后修改它的值时会直接跳出循环
#include #include /**指针就是内存地址 内存地址就是指针*/main(){printf("玩游戏倒计时开始了:\n"); int i;for(i=100;i>0;i--){// 这里有一些不同  , 可以尝试 _sleep 或者 sleep 或者 Sleep_sleep(5000);printf("还剩下多少秒:%d\n",i); }// 当通过知道内存地址的值之后修改它的值时会直接跳出循环 printf("恭喜您 , 完成了游戏!\n"); system("pause");}
加深指针的理解 实验一
第一个实验: 如果修改 i 值, p值有变化吗?
当我们在次打印p的值时,虽然i的值变为200了 , 但是是打印p的值 , 打印p的值与i的值(100,200) , 没有关系 。
#include #include /**指针就是内存地址 内存地址就是指针*/main(){int i =100;int* p = &i; // 第一个实验: 如果修改 i 值, p值有变化吗? // 修改i值前,p的值时:0x60fef8// 修改i值后,p的值时:0x60fef8// 得出的结果为不变 // 当我们在次打印p的值时,虽然i的值变为200了 , 但是是打印p的值 , 打印p的值与i的值(100,200) , 没有关系 。printf("修改i值前,p的值时:%#x\n",p); i =200;printf("修改i值后,p的值时:%#x\n",p); }