首页 >> 大全

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

2023-06-23 大全 56 作者:考证青年

手把手入门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); 
}

如图分析:

实验二

第二个实验: 如果修改 p 值, i值有变化吗?

当执行完p = &j;时p的地址值变了,但是i的值没有变化

#include 
#include /**指针就是内存地址 内存地址就是指针
*/
main(){int i =100;int* p = &i;	//第二个实验: 如果修改 p 值, i值有变化吗? // 修改 p 的话是修改地址值,所以定义 int j = 200;// 结果如下:// 修改p值前,i的值时:100// 修改p值后,i的值时:100 printf("修改p值前,i的值时:%d\n",i); int j = 200;p = &j;printf("修改p值后,i的值时:%d\n",i); system("pause");
}

如图分析:

实验三

第三个实验: 如果修改 i 值, *p值有变化吗?

有变化,*p:把对应的地址的值取出来,此时为200

#include 
#include /**指针就是内存地址 内存地址就是指针
*/
main(){int i =100;int* p = &i;	//第三个实验: 如果修改 i 值, *p值有变化吗?// *p对应的是int类型的占位符 printf("修改i值前,*p的值时:%d\n",*p); i =200;// *p:把对应的地址的值取出来,此时为200printf("修改i值后,*p的值时:%d\n",*p); system("pause");
}

如图分析:

实验四

==第四个实验: 如果修改 *p 值, i值有变化吗? ==

有变化,*p = 200; 执行完后:把对应的地址的值变为200

#include 
#include /**指针就是内存地址 内存地址就是指针
*/
main(){int i =100;int* p = &i;	//第四个实验: 如果修改 *p 值, i值有变化吗? printf("修改*p值前,i的值时:%d\n",i); // 把地址对应的值改变了 *p = 200;printf("修改*p值后,i的值时:%d\n",i); system("pause");
}

如图分析:

总代码

#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); //第二个实验: 如果修改 p 值, i值有变化吗? // 修改 p 的话是修改地址值,所以定义 int j = 200;// 结果如下:// 修改p值前,i的值时:100// 修改p值后,i的值时:100 /**printf("修改p值前,i的值时:%d\n",i); int j = 200;p = &j;printf("修改p值后,i的值时:%d\n",i); *///第三个实验: 如果修改 i 值, *p值有变化吗?// *p对应的是int类型的占位符 /**printf("修改i值前,*p的值时:%d\n",*p); i =200;printf("修改i值后,*p的值时:%d\n",*p); *///第四个实验: 如果修改 *p 值, i值有变化吗? printf("修改*p值前,i的值时:%d\n",i); // 把地址对应的值改变了 *p = 200;printf("修改*p值后,i的值时:%d\n",i); system("pause");
}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了