最新要闻
- 唐门鸟翔碧空在哪里学?唐门鸟翔碧空可以放什么技能?
- 雷龙鱼水温多少合适?雷龙吃什么饲料?
- 最新消息:三星Galaxy S23系列定档:2月2日登场 首发新版骁龙8 Gen2
- 《满江红》公布秦桧版预告:饰演者雷佳音狠辣狡诈
- 【全球新要闻】特斯拉大降价 其它车企跟不跟?乘联会秘书长发声
- 焦点速读:万物有灵 被收养流浪狗跳车拦住怀孕主人 下一秒山路塌方
- 每日聚焦:1208元!中国探月航天推出限量火箭碎片:运送嫦娥四号的长三乙
- 加减乘除是谁发明的?加减乘除混合运算100道
- 米亲韩语是什么意思?韩语shake it是什么意思?
- 全高清和超高清有什么区别?全高清和超高清4K哪个更护眼?
- 异丙醇的作用与用途有哪些?异丙醇和酒精的区别是什么?
- 每日热点:没电、没网也能支付 数字人民币全新功能上线:安卓先行
- 环球微资讯!用上比亚迪发动机 斯威大虎ED-i增程版亮相:油耗低至2.06升
- 关注:公司就给员工加薪50元致歉 已尽力对不起大家引热议:为何不知足?
- Win7彻底停服 国产OS统信站出来了:打印机、软件轻松迁移
- 还买iPhone 14/15?新iPhone准备中:苹果弃灵动岛 更完美
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界热点!指针知识点总结
指针总结
基础概念
系统给虚拟内存的每个存储单元分配了一个编号,0x0000 0000-0xff ff ff ff,这个编号是地址,指针就是地址
(资料图)
内存数据的访问方式:
(1)直接访问—按变量名存取变量。
(2)间接访问——将变量的地址存放在另一个变量(指针变量),通过指针变量来访问。
数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。
在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。指针变量的值就是某份数据的地址,这样的一份数据可以是数组、字符串、函数,也可以是另外的一个普通变量或指针变量。
在32位平台,地址总线是32位,地址是32位编号,所以指针变量是32位即4个字节
注意: (1)无论什么类型的地址,都是存储单元的编号,在32位平台下都是4个字节 即任何类型的指针变量都是4个字节大小.在64位系统中任何类型的指针都是8个字节大小。 (2)对应类型的指针变量,只能存放对应类型的变量的地址 举例:整型的指针变量,只能存放整型变量的地址 拓展: 字符变量char ch=’b’;ch占一个字节,它有一个地址编号,而这个编号就是ch的地址 整型变量int a=0x12345678;a占4个字节,它占4个字节的存储单元,有4个地址编号
指针的定义及赋值方法
指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址, 决不能赋予任何其它数据,否则将引起错误。
1.简单的指针变量 数据类型 * 指针变量名; int * p;//定义了一个指针变量p 注意:在定义指针变量的时候 * 是用来修饰变量的,说明变量p是个指针变量。 变量名是p 2.关于指针的运算符 &取地址、*取值(解引用)
int pa = &a; 也可以写成 intpa = &a; 即 * 号可以紧跟在变量类型后,也可以紧跟在变量名字前,就是个指针类型标识符。这条语句等价于 int *pa; pa=&a;其具体含义为:定义一个可以指向整型数据的指针变量pa,并用整型变量a的地址值对指针变量pa进行初始化,从而使指针变量pa具体地指向了整型变量a。
int a=0x12345678;int b;int *p;//在定义指针变量的时候*代表修饰的意思,修饰p是个指针变量p=&a;//把a的地址给p赋值 &是取地址符b=*p;//这里的*是解引用,取指针p所指向的变量a的值
p保存了a的地址,也可以说p指向了ap和a的关系分析:a的值是0x12345678,假设a的地址是:0xbf e8 98 68
int num;num=*p;
分析:(1)在调用的时候*代表取值的意思,*p就相当于p指向的变量a (2)即num=*p和num=a是等价的 (3)所以num=0x12345678;
小拓展:如果在一行中定义多个指针变量,每个指针变量前面都需要加*来修饰 int *p,*q;//定义了两个整型的指针变量p和q int *p,q;//定义了一个整型指针变量p,和整型变量q
指针变量的运算(引用)
指针变量可以进行某些运算,但其运算的种类是有限的。 它只能进行赋值运算和部分算术运算及关系运算。
1指针运算符
指针运算符(1)取地址运算符 &&是单目运算符,其结合性为自右至左,其功能是取变量的地址。例&a即变量a的地址(2)取内容运算符 **是单目运算符,其结合性为自右至左,用来表示指针变量所指的变量。在*运算符之后跟的变量必须是指针变量。注意:指针运算符*和指针变量说明中的指针说明符* 不是一回事。 在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型。int *p; 而表达式中出现的“*”则是一个运算符用以表示指针变量所指的变量。*p=&a
若有定义: int a, p=&a(1)&*p 表示:p(2)*&a 表示: a (3)(*p)++相当于a++ (4)*p++相当于*(p++),即先取p所指向变量的值,然后,让p指向下一个存储单元。(5)*++p相当于*(++p),即先让p指向下一个存储单元,然后再取p所指向变量的值。
//利用指针输入变量的值main(){ int a,b; int *p; p=&a; scanf("%d",p); p=&b; scanf("%d",p); printf(”a=%d, b=%d\n",a,b);}
2指针变量的赋值运算
指针变量的赋值运算有以下几种形式: 1.指针变量初始化赋值,前面已作介绍。 2.把一个变量的地址赋予指向相同数据类型的指针变量。例如: int a,*pa; pa=&a; /*把整型变量a的地址赋予整型指针变量pa*/ 3.把一个指针变量的值赋予指向相同类型变量的另一个指针变量。如: int a,*pa=&a,*pb; pb=pa; 把a的地址赋予指针变量pb,由于pa,pb均为指向整型变量的指针变量,因此可以相互赋值 4.把数组的首地址赋予指向数组的指针变量。例如: int a[5],*pa; pa=a; (C语言规定数组名表示数组的首地址)也可写为: pa=&a[0]; 数组第一个元素的地址也是整个数组的首地址,也可赋予pa当然也可采取初始化赋值的方法: int a[5],*pa=a;5.把字符串的首地址赋予指向字符类型的指针变量。 例如: char *pc; pc="C language"; 或用初始化赋值的方法写为: char *pc="C Language"; 这里应说明的是并不是把整个字符串装入指针变量, 而是把存放该字符串的字符数组的首地址装入指针变量。注意:指针变量可以赋予0值,则p=0表明p是空指针,它不指向任何变量;
字符串的地址和指向字符串的指针变量
字符串在内存中的起始地址称为字符串的地址,可以定义一个字符指针变量指向一个字符串。
1.逐个引用main(){ char *string=”I love Beijing.”; for(; *string!=’\0’; string++) printf(“%c”, *string); printf(“\n”);} 字符指针变量string中,仅存储串常量的地址,而串常量的内容(即字符串本身),是存储在由系统自动开辟的内存块中,并在串尾添加一个结束标志’\0’。 2.整体引用main() { char *string=”I love Beijing.”; printf(“%s\n”,string); }通过指向字符串的指针变量string,整体引用它所指向的字符串的原理:系统首先输出string指向的第一个字符,然后使string自动加1,使之指向下一个字符;重复上述过程,直至遇到字符串结束标志。3.字符指针变量与字符数组之比较虽然用字符指针变量和字符数组都能实现字符串的存储和处理,但二者是有区别的,不能混为一谈。(1)存储内容不同。字符指针变量中存储的是字符串的首地址,而字符数组中存储的是字符串本身(数组的每个元素存放一个字符)。(2)赋值方式不同对字符指针变量,可采用下面的赋值语句赋值: char *pointer; pointer="This is a example.";而字符数组,虽然可以在定义时初始化,但不能用赋值语句整体赋值。下面的用法是非法的: char array[20]; char array="This is a example."; /*非法用法*/!!!补:字符数组的正确赋值方法 1、定义的时候直接用字符串初始化 char a[10]="hello"; 注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!只有定义初始化是才能这样赋值 2、对数组中字符逐个赋值 char a[10]={"h","e","l","l","o"}; 3、利用strcpy,这个比较值得推荐的方法 char a[10]; strcpy(a, "hello");(3)指针变量的值是可以改变的,字符指针变量也不例外;而数组名代表数组的起始地址,是一个常量,而常量是不能被改变的。
函数与指针
•用指针变量可以指向一个函数。简称函数指针。•函数在编译时被分配给一个入口地址。这个函数的入口地址就称为函数的指针。定义格式:函数的返回值类型(函数指针名)(函数的形参列表)例:int (p)(int a,int b);
//函数的指针 int max(int x,int y)//max函数:判断两个值的最大值{ int z; if(x>y)z=x; else z=y; return(z); }void main(){ int max(int,int); int (*p)();//int (*p)()为函数指针的定义 int a,b,c; p=max;//将max函数赋给指针函数p scanf(″%d,%d″,&a,&b); c=(*p)(a,b);//此时*p起到了max函数相同的作用 printf(″a=%d,b=%d,max=% d″,a,b,c); }
指针函数:是一个函数,但是这个函数的返回值类型是另一个指针。
int *fun(){ int a=10; int *p=10; return p; //return &a;这样写是错的,指针函数需要返回一 个指针,例如上面的*p才是正确的返回类型}int main(){ int *q=fun(); printf("%d\n",*q);}
//例:使用函数指针得出两个数的最大值,最小值,相加值。#includevoid main(){//函数声明 int max(int,int); int min(int,int); int add(int,int); void process(int,int,int(*fun)(int,int)); int a,b; printf("enter a and b:"); scanf("%d,%d",&a,&b); printf("max="); process(a,b,max); printf("min="); process(a,b,min); printf("sum="); process(a,b,add);}int max(int x,int y){ int z; if(x>y) z=x; else z=y; return(z);}int min(int x,int y){ int z; if(x
数组与指针
一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都相当于一个指针变量。一维指针数组的定义形式为:类型名 数组名[数组长度];例如:int *p[4];
//将若干字符串按字母顺序(由小到大)输出。#include #include void main(){ void sort(char *name[],int n); void print(char *name[],int n); //指针数组定义与赋值 char *name[]={"Follow me","BASIC","Great Wall","FORTRAN","Computer design"}; int n=5; sort(name,n); print(name,n);}void sort(char *name[],int n){//比较首字母顺序 char *temp;//字符串指针变量 int i,j,k; for(i=0;i0) { k=j; } if(k!=i) { temp=name[i]; name[i]=name[k]; name[k]=temp; } }}void print(char *name[ ],int n){//字符串的输出 int i; for(i=0;i
小结
有关指针的数据类型的小结
定义 | 含义 |
---|---|
int i; | 定义整型变量i |
int *p; | p为指向整型数据的指针变量 |
int a[n]; | 定义整型数组a,它有n个元素 |
*int p[n]; | 定义指针数组p,它由n个指向整型数据的指针元素组成 |
int (*p)[n]; | p为指向含n个元素的一维数组的指针变量 |
int f(); | f为带回整型函数值的函数 |
*int p(); | p为带回一个指针的函数,该指针指向整型数据 |
int(*p)(); | p为指向函数的指针,该函数返回一个整型值 |
int **p; | p是一个指针变量,它指向一个指向整型数据的指针变量 |
指针运算小结
(1)指针变量加(减)一个整数例如:p++、P--、p+i、p-i、p+=i、p-=i等。
(2)指针变量赋值将一个变量地址赋给一个指针变量。如:p=&a(将变量a的地址赋给p)p=array;(将数组array首元素地址赋给p)p=&array[ i ];(将数组array第i个元素的地址赋给p)p=max;(max为已定义的函数,将max的入口地址赋给p)p1=p2;(p1和p2都是指针变量,将p2的值赋给p1)
(3)指针变量可以有空值,即该指针变量不指向任何变量。
(4)两个指针变量可以相减如果两个指针变量都指向同一个数组中的元素,则两个指针变量值之差是两个指针之间的元素个数 。
-
linux基础:2、前期必备知识、系统运行命令、快捷方式命令、目录结构相关命令、文件与文件夹相关命令、目录结构
linux基础一、前期必备知识1、命令提示符[root@jasonNB~] root:表示用户名信息@:分隔符jasonNB:主机...
来源: 世界热点!指针知识点总结
每日热讯!TiDB 底层存储结构 LSM 树原理介绍
linux基础:2、前期必备知识、系统运行命令、快捷方式命令、目录结构相关命令、文件与文件夹相关命令、目录结构
环球今日报丨C# 循环给多个连续编号的控件赋值
网上银行怎么转账?网上银行转账限额是多少?
诺基亚5800xm当年多少钱?诺基亚5800XM手机参数
投影仪吊架怎么安装?吊式投影仪安装方法
华为gt2怎么设置相册表盘?华为gt2有血氧功能吗?
唐门鸟翔碧空在哪里学?唐门鸟翔碧空可以放什么技能?
雷龙鱼水温多少合适?雷龙吃什么饲料?
最新消息:三星Galaxy S23系列定档:2月2日登场 首发新版骁龙8 Gen2
《满江红》公布秦桧版预告:饰演者雷佳音狠辣狡诈
【全球新要闻】特斯拉大降价 其它车企跟不跟?乘联会秘书长发声
焦点速读:万物有灵 被收养流浪狗跳车拦住怀孕主人 下一秒山路塌方
每日聚焦:1208元!中国探月航天推出限量火箭碎片:运送嫦娥四号的长三乙
加减乘除是谁发明的?加减乘除混合运算100道
米亲韩语是什么意思?韩语shake it是什么意思?
全高清和超高清有什么区别?全高清和超高清4K哪个更护眼?
异丙醇的作用与用途有哪些?异丙醇和酒精的区别是什么?
Serverless 奇点已来,下一个十年将驶向何方?
每日热点:没电、没网也能支付 数字人民币全新功能上线:安卓先行
环球微资讯!用上比亚迪发动机 斯威大虎ED-i增程版亮相:油耗低至2.06升
关注:公司就给员工加薪50元致歉 已尽力对不起大家引热议:为何不知足?
Win7彻底停服 国产OS统信站出来了:打印机、软件轻松迁移
读编程与类型系统笔记04_类型安全
微动态丨【QtJson】用Qt自带的QJson,直接一步到位封装和解析一个类的实例对象!
还买iPhone 14/15?新iPhone准备中:苹果弃灵动岛 更完美
人民日报评电视收费乱象:从用户身上“薅羊毛” 广告还见缝插针
微头条丨今年首场寒潮来袭 最强雨雪下在哪?这些地区将迎暴雨、暴雪
天天滚动:2022年 我把比亚迪DM-i插混当纯电动车 开了1万公里
《王者荣耀》星会员正式上线:全新充值体系 打破贵10等级限制
当前速讯:神舟新款游戏本上架:13代i5+满血RTX 3050 4999元
最强高端!小米13 Ultra有望下月发:终于告别USB 3.0
动态:家长炮轰《中国奇谭》烂 吓哭孩子引热议:专家回应 给成年人看
环球观焦点:贾跃亭又摊上事了:法拉第未来接到纳斯达克摘牌警告
全球报道:JavaScript 扁平与树形数组数据的转换
热点在线丨层叠样式表(CSS)1
当前最新:ceph-3
世界速读:区块链特辑——solidity语言基础(四)
热文:华硕全球首秀四频段Wi-Fi 7路由器:峰值下载2.5万兆
滚动:惠普新款EliteBook 1040笔记本发布:13代酷睿、2K 120Hz屏
天天视点!为什么一个病毒株传着传着就没了?
Redmi K40S 12+256G顶配版不到1900元:骁龙870和OIS都有
各大新能源车企年度KPI出炉 特斯拉未达标 比亚迪称王
焦点速读:区块链特辑——solidity语言基础(二)
每日时讯!酷安最火骁龙8系手机诞生!一加11酷安热度第一
时隔两年 国美真快乐App重新更名国美
快看点丨大前端html学习06-宽高自适应
天天观察:SpringDataJPA 程序未配置乐观锁的情况下,报了乐观锁异常
Redis的客户端
每日时讯!关于19c RU补丁报错问题的分析处理
环球简讯:记录使用adb连接rn项目进行开发
焦点要闻:加油被惊喜到!一加11不杀后台:前一天打开的APP第二天还在
最新快讯!Python中高阶函数与装饰器教程
【新要闻】Python中的异常处理总结
flutter 效果实现 —— 全面屏效果
Mysql中的锁:表、MDL、意向锁、行锁
温子仁恐怖片新作《梅根》 拯救了北美院线一月票房
天天热点评!被假货逼疯的劳力士:终于坐不住了
全球快资讯:要的就是销量!特斯拉在新加坡优惠近7万
全球新资讯:豆瓣9.5高分动画!有家长炮轰《中国奇谭》画风吓哭孩子 网友不乐意了
全球今日报丨【首页】热销爆品开发修改商品值
加了国六B汽油 排气管喷水?网友犀利吐槽:我加了拉肚子
热讯:峰米S5 Rolling投影仪发布:360度可旋转支架 还能当音箱用
世界热推荐:米哈游创始人之一参与打造:国产独立游戏《微光之镜》今日发售
即时看!奥迪RS e-tron GT很好 但它仍是大众体系里最拧巴的产品
当前讯息:菜鸟将投2亿:补贴快递员爬楼送货上门
天天快看:iOS 16卡壳了
世界热推荐:OLED+彩色水墨翻转双屏!联想公布ThinkBook Plus Twist笔记本
天天微速讯:雷军爆料了!新机皇小米13 Ultra或将于MWC发布:影像堆料突破天际
焦点速看:因易增加儿童哮喘几率:美国或将禁止使用燃气灶
【环球播资讯】曾狠坑过乐视!中电熊猫被拉横幅维权:“还我血汗钱”
快消息!事件处理_2事件修饰符
flutter 基础 —— 事件监听
环球热门:JavaScript 将base64 转换为File
当前信息:129元 荣耀智能体脂秤3开售:Wi-Fi、蓝牙双连接
买699元手机送99元耳机!Redmi 12C价格跟米粉交个朋友
今晚20点抢京东大额红包 天猫年货节红包最后一天
每日动态!没了量子力学 你连手机都玩不了
焦点热讯:9.78万起 飞度堂弟新款东风本田来福酱上市:动力被砍、油耗不变
热门看点:Bonitasoft认证绕过和RCE漏洞分析及复现(CVE-2022-25237)
【世界快播报】操作系统 — 精髓与设计原理(第二章 操作系统概述)
速看:2023年手机还能怎样进化?三点方向
全球热议:干不过BBA!广汽讴歌退出中国市场:车型少 价格高
俄罗斯影院播放盗版《阿凡达2》:还是合法的!西方干瞪眼
【环球新视野】巴黎圣母院确认2024年重开!《刺客信条》花费2年还原
今日关注:接盘国服暴雪玩家!网易《无尽战区》明天开服 配置要求公布
每日热门:部分聚类算法简介及优缺点分析
时讯:记录--JS-SDK页面打开提示realAuthUrl错误
最新:5. 使用互斥量保护共享数据
环球新消息丨【Python爬虫实战项目】Python爬虫批量下载相亲网站数据并保存本地(附源码)
天天快看:什么是堆叠面积图?
热点在线丨老车主维权、新客户下单!特斯拉大降价后3天获3万辆订单
每日快讯!李斌:我们从来不把自己称作豪华品牌
当前观察:百度CreateAI开发者大会:李彦宏称2027前一线城市不再需要限购限行
当前热文:炒币亏了3个亿的美图满血复活了:全体员工发股票 搬入新大楼
过年微醺 RIO鸡尾酒大促!56元到手10瓶
软件开发入门教程网之MySQL NULL 值处理
环球关注:【首页】商品列表和单个商品组件封装
焦点报道:曝iPhone 15开始试产:采用国产灵动岛屏 京东方供货