指针笔记_1
发布日期:2021-11-20 10:17:32
浏览次数:8
分类:技术文章
本文共 2629 字,大约阅读时间需要 8 分钟。
基本类型指针
参考链接:https://blog.csdn.net/ZackSock/article/details/101594794 1.指针的表示方法:数据类型* 变量名 如:int* p 代表 p是一个指针类型的变量即 int*类型。2.指针变量存放的地址,所以赋值形式只能是其他变量的地址,其表示形式可用下面代码可解释:
其中p=&i,表示p指向i,所以*p等于i#include "pch.h"#includeint main(){ int* p;//说明只能存放整型变量的地址,例如:i为整型,所以,i的地址可以存放到p里面, //p是变量的名字,int*表示p变量存放的是int类型变量的地址 int i = 3; p = &i;//正确 //p = i; //错误,因为类型不一致,p只能存放int类型变量的地址,不能存放int类型变量数值 return 0;}
3.通过指针的形式可以修改普通变量的值
解释: 程序中定义了i变量,p变量,所以他们都是有计算机为他们分配了空闲的地址供他们使用,假如 i 的地址为1000H,则p =&i,代表p中存放了i的地址,也就是p指向了i,所以p表示以p的内容为地址的变量,所以p=i,这样通过修改*p的值可以改变i的值,如下: #include “stdio.h”void f(int* p) {
*p = 100; }int main(void)
{ int i = 9; f(&i); printf(“i=%d\n”, i); return 0; } 3.1程序实例: /* 指针就是地址,是一个内存单元的编号 而指针变量是存放地址的变量, 指针和指针变量是连个不同的概念,但通常叙述时会把指针变量简称为地址 */#include "pch.h"#includeint main(){ int* p;// p是一个变量,p变量的数据类型为 int* 类型,int* 指存放int变量地址的类型 int i = 3; int j; p = &i;/*1 p保存了i的地址,因此p可以指向i。 2 但p不是i,i也不是p,更准确的说,修改p得值不影响i的值,修改i的值也不影响p的值 3. 如果一个指针变量指向了某个普通变量,则 *指针变量 就完全等同于 普通变量 例子: 如果p是个指针变量,并且P存放了普通变量i的地址p =&i,则p指向普通变量i *p 就完全等同于i,(规定是这样写) 或者说: 在所有出现*p的地方都可以替换成i,在所有出现i的地方都可以替换成*p */ j = *p; // *p就是以p的内容为地址的变量 printf("i = %d,j=%d\n", i, j); return 0;}
4.经典指针的程序——互换两个数字
4.1 普通互换方式#includeint main(){ //普通写法 int a = 3; int b = 5; int t; t =a; a=b; b=t; printf("a=%d\nb=%d\n", a, b); return 0; }
4.2 若定义一个调用函数,不能完成4.1操作互换
解释:当定义了函数huhuan_1,主函数的a,b和函数huhuan_1中形参a,b不是一个,因为 : 主函数中的a,b分别分配了地址, 函数huhuan_1中的a,b也分别分配了地址,是不同的地址,而这样的调用,只是改变了形参中的值,但是当函数调用完成后,释放掉了,所以主函数中的a,b的值没有改变。***/形参和实参不是一个变量,即使可能名字一样,但是意义不同, //当一个函数使用完后,为这个函数使用的所有静态空间都会被释放,因为一个函数不可能只让一个使用***(注意:主函数的a,b和huhuan_1中的a,b都是局部变量,局部变量只在自己的函数中使用),而使用指针调用可以改变,因为: 指针变量可以存放地址,通过改变地址的内容可以完成互换,如4.3#include//不能完成互换void huhuan_1(int a, int b) { int t; t = a; a = b; b = t; return;}int main(){ //普通写法 int a = 3; int b = 5; huhuan_1(a,b); printf("a=%d\nb=%d\n", a, b); return 0; }
4.3 指针完成互换
#include//不能完成互换功能,只是互换了地址,并没有互换指针所指向的地址里面的值。**两个值真正的互换必须是地址所对应的值换了。**void huhuan_2(int * p, int * q) { int* t;//t必须是int*类型,不能是int t = p; p = q; q = t; return;} //这个正确void huhuan_3(int * p, int * q) { int t;//t必须是int*类型,不能是int,如果要互换*p,*q的值,必须定义t为int,不能是*t t = *p;//p是int*, *p是int *p = *q; *q = t; return;}int main(){ //普通写法 int a = 3; int b = 5; //huhuan_2(&a, &b);//huhuan_2(*p,*q);是错误的,huhuan_2(a, b)错误 huhuan_3(&a, &b); printf("a=%d\nb=%d\n", a, b); return 0; }
5.指针在指向时必须类型一致
如程序中p =&ch //错误写法
#includeint main(){ int * p; int i = 5; char ch = 'A';//单个字符用单引号。字符串用双引号 //p = &ch; //类型不一样 p = &i;//正确,*p = i,*p表示以p的内容为地址的变量 return 0;}
转载地址:https://blog.csdn.net/weixin_43223362/article/details/101310264 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月20日 23时11分59秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
说说 Python 正则表达式的匹配类型
2019-04-26
说说 Python 的贪心和非贪心匹配策略
2019-04-26
说说在 Python 中,如何找出所有字符串匹配
2019-04-26
说说 Python 正则表达式中的那些字符类别码
2019-04-26
说说 Spring Boot 的条件化注解
2019-04-26
说说如何使用 Python 在 word 中创建表格
2019-04-26
Python 基础知识考题与解答(2020 版)
2019-04-26
说说 Oracle 的 SYSDATE 函数
2019-04-26
说说 Oracle 的 NVL 与 NVL2 函数
2019-04-26
说说 TCP 协议以及三次握手流程
2019-04-26
说说 Oracle 的 TRUNC 函数
2019-04-26
系统架构设计笔记(41)—— 系统过渡计划
2019-04-26
系统架构设计笔记(42)—— 软件架构概述
2019-04-26
系统架构设计笔记(57)—— 测试自动化与面向对象的测试
2021-06-29
系统架构设计笔记(58)—— 嵌入式系统概论
2021-06-29
说说 Python 的生成器表达式
2021-06-29
说说 Activiti 中的用户与组的概念
2021-06-29
系统架构设计笔记(62)—— 嵌入式数据库管理系统
2021-06-29
系统架构设计笔记(63)—— 实时嵌入式操作系统
2021-06-29