C++指针

news2024/11/19 9:19:41

指针的基本概念

作用:通过指针间接访问内存。

内存编号从0开始,一般使用16进制表示。

可以利用指针变量保存地址。

指针变量定义和使用

数据类型*变量名

#include<iostream>
using namespace std;

int main(){
	//定义指针
	int a=10;
	//指针定义语法 数据类型*指针变量名
	int*p;
	//让指针记录a的地址
	p=&a;
	cout<<"a的地址为"<<&a<<endl;
	cout<<"指针p的值为"<<p<<endl;
	//使用指针
	//使用解引用方式找到指针指向的内存
	//指针前加*找到指针指向内存中的数据
	*p=1000;
	cout<<"a的值为"<<a<<endl;
	cout<<"*p的值为"<<*p<<endl;
	return 0;
	
	
	
	
	
}

控制台:

通过对内存进行操作,直接修改变量的值。

指针所占的内存空间

32位操作系统:占用4个字节

64位操作系统:占用8个字节

#include<iostream>
using namespace std;

int main(){
	//定义指针
	int a=10;
	//指针定义语法 数据类型*指针变量名
	int*p;
	//让指针记录a的地址
	p=&a;
	cout<<"sizeof(int*)="<<sizeof(p)<<endl;
	cout<<"sizeof(float*)="<<sizeof(float*)<<endl;
	cout<<"sizeof(double*)="<<sizeof(double*)<<endl;
	cout<<"sizeof(char*)="<<sizeof(char*)<<endl;
	
	
	
	
	system("pause");
	return 0;
	

	
	
	
}

 

 空指针和野指针

空指针:指针变量指向内存中编号为0的空间

用途:初始化指针量

注意:空指针指向的内存不可以访问

#include<iostream>
using namespace std;

int main(){
	//指针变量p指向内存地址编号为0的空间,对指针变量进行初始化
	int*p=NULL;
	//空指针不能访问
	//0-255之间内存编号系统占有,不可以访问
	
	cout<<*p<<endl;
	system("pause");
	return 0;
	
	
	

	
	
	
}

下面程序运行会出现报错或无任何形式输出。

野指针:指针变量指向非法内存空间

#include<iostream>
using namespace std;

int main(){
	
	//野指针
	int *p=(int*)0x1100;
	cout<<*p<<endl;
	
	
	
	system("pause");
	return 0;
	
	
}

程序运行会出现报错或无任何形式输出。

不要随意更改空指针或野指针。

const修饰指针

const修饰指针 常量指针

const修饰常量 指针常量

const修饰指针也修饰常量

#include<iostream>
using namespace std;

int main(){
	int a=10;
	int b=10;
	int c=30;
	//const修饰指针
	const int*p=&a;//指针指向可以修改,指针指向的值不能修改
	cout<<"a:"<<*p<<endl;
	int *const p1=&b;//指针常量,指针指向不能修改,但指针指向值可以修改
	*p1=20;
	cout<<"b:"<<b<<endl;
	const int *const p2=&c;   //指针指向和值都不能修改
	cout<<"*p2:"<<*p2<<endl;
	cout<<"c:"<<c<<endl;
	
	
	
	

	
	
	
	system("pause");
	return 0;
	
	
}

指针和数组

利用指针访问数组中的元素。

#include<iostream>
using namespace std;

int main(){
  int a[]={1,2,3,4,5,6,7,8,9,10};
  //第一个元素
  cout<<"a[0]:"<<a[0]<<endl;
  int*p=a;//a就是数组首地址
  cout<<"利用指针访问第一个元素:"<<*p<<endl;
  p++;
  cout<<"利用指针访问第二个元素:"<<*p<<endl;
  
  
  cout<<"利用指针访问数组元素素:"<<endl;
  int*p2=a;
  for(int i=0;i<10;i++){
	  cout<<*p2++<<" ";
  }
  
	
	
	

	
	
	
	system("pause");
	return 0;
	
	
}

 

指针和函数 

利用指针做函数参数,可以修改实参的值。

#include<iostream>
using namespace std;
//实现两个数组交换
void swap1(int a,int b){
	int tmp=a;
	a=b;
	b=tmp;
}
void swap2(int*p1,int*p2){
	int tmp=*p1;
	*p1=*p2;
	*p2=tmp;
	
}



int main(){
	//值传递
	int a=10;
	int b=20;
	swap1(a,b);
	cout<<"swap1a= "<<a<<endl;
	cout<<"swap1b= "<<b<<endl;
	
	
   //地址传递
   swap2(&a,&b);
   cout<<"swap2a= "<<a<<endl;
   cout<<"swap2b= "<<b<<endl;
	

	system("pause");
	return 0;
	
	
}

值传递只能改变形参的值,不能改变实参的值。

而地址传递可以改变实参的值。

 指针,数组,函数

封装一个函数,利用冒泡排序,实现对整型数组的升序排序。

#include<iostream>
using namespace std;
//冒泡排序 数组首地址 数组长度
void bubble(int*a,int len){
	for(int i=0;i<len-1;i++)
		for(int j=0;j<len-i-1;j++){
		if(a[j]>a[j+1]){
			int tmp=a[j];
			a[j]=a[j+1];
			a[j+1]=tmp;
		}
	}
}
void printArr(int*a,int len){
	for(int i=0;i<len;i++){
		cout<<a[i]<<" ";
	}
	
	
}
int main(){
    int a[]={1,9,8,2,7,4,6,5};
	int len=sizeof(a)/sizeof(a[0]);
	bubble(a,len);
	printArr(a,len);
	system("pause");
	return 0;
	
	
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/163451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

绕线机-排线伺服速度解算FC(比例随动编程应用)

绕线机模型和算法详细讲解,专栏已有几篇介绍文章,这篇属于补充和升华。在介绍这篇文章算法之前大家有必要了解什么是"随动系统"。相关链接如下: 绕线机机械结构相关介绍: S7-200 SMART PLC和V20变频器绕线机控制应用_RXXW_Dor的博客-CSDN博客_plc绕线机绕线机P…

循迹小车基本原理和代码实现

目录 一、循迹模块使用 二、接线方式 三、循迹小车原理 四、代码实现 一、循迹模块使用 1、TCRT5000传感器的红外发射二极管不断发射红外线&#xff0c;当发出的红外线没有被反射回来或被反射回来但强度不太够时&#xff0c;红外接收管一直处于关断状态&#xff0c;此时模…

将本地SpringBoot微服务制作成Docker Image镜像包然后运行

将本地SpringBoot微服务制作成Docker Image镜像包然后运行 文章目录将本地SpringBoot微服务制作成Docker Image镜像包然后运行1&#xff09;环境准备2&#xff09;验证jar包3&#xff09;制作images镜像包4&#xff09;注意1&#xff09;环境准备 准备一个SpringBoot项目&…

音视频笔记

音视频笔记 基础理论知识 雷神的博客 [总结]视音频编解码技术零基础学习方法 视频压缩 H264码流结构 码流结构&#xff1a;原来你是这样的H264 H265码流结构 音视频基础&#xff1a;H265/HEVC&码流结构 FFMPEG 雷神的博客 [总结]FFMPEG视音频编解码零基础学习方法…

1583_AURIX_TC275_SMU的控制以及FSP

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) SMU的软件控制接口主要是实现了一些控制命令&#xff0c;用于控制SMU的状态机以及FSP。具体的内容在上面的一部分表格以及接下来的一页中的表格中有介绍。 涉及到ed命令&#xff0c;用几个…

NC6 Error to init aggVOStyle,Please check the back log

由于近期调整及抵消模板的公式字段长度不够&#xff0c;就修改了元数据的字符长度&#xff0c;结果导致修改保存后保存&#xff0c;报错如下&#xff08;如果大家有什么好的解决方案&#xff0c;欢迎评论留言一起探讨学习&#xff09;&#xff1a; 错误日志&#xff1a; 11:1…

Slurm中集群配置文件slum.conf

1.slurm.conf简介slurm.conf是一个ASCII文件&#xff0c;它描述了一般的Slurm 配置信息、要管理的节点、有关如何将这些节点分组到分区中&#xff0c;以及各种调度与这些分区关联的参数。此文件应为在群集中的所有节点上保持一致。可以通过设置SLURM_CONF在执行时修改文件位置 …

初识网络:IP、端口、网络协议、TCP-IP五层模型

目录 一、了解IP地址&#xff1a; 二、了解端口号: 三、网络协议 网络协议的三要素: ①语法 ②语义 ③时序 四、协议的分层(TCP/IP五层模型&#xff09; ①应用层 ②传输层&#xff08;也称为运输层&#xff09; ③网络层 ④数据链路层 ⑤物理层 五、A用户通过QQ给B发送一…

【Java基础知识 2】Java中常用的48个关键字和2个保留字 || Java命名规范(从此告别起名难)

本文已收录专栏 &#x1f332;《Java进阶之路》&#x1f332; 目录 本文已收录专栏 &#x1f332;《Java进阶之路》&#x1f332; Java中常用的48个关键字和2个保留字 关键字 保留字 Java命名规范&#xff08;从此告别起名难&#xff09; 01、包&#xff08;package&#…

Spring MVC 整合 Shiro 权限控制

Apache Shiro 是一个功能强大且灵活的开放源代码安全框架&#xff0c;可以细粒度地处理认证 (Authentication)&#xff0c;授权 (Authorization)&#xff0c;会话 (Session) 管理和加密 (cryptography) 等企业级应用中常见的安全控制流程。 Apache Shiro 的首要目标是易于使用和…

python实现excel和csv中的vlookup函数

本篇博客会介绍如何使用python在excel和csv里实现vlookup函数的功能&#xff0c;首先需要简单了解一下python如何操作excel 1. python处理excel 1.1 删除excel中指定行 在文件夹里创建了一个excel文件&#xff0c;可以看到里面放的是三国人物的数据 会发现在【蜀】里&#…

ESP-IDF:在C++环境下实现动态数组例程,包括初始化,添加数值,查找,删除,打印等功能

代码&#xff1a; /* 动态数组 */ struct DYNAMICARRAY { int *pAddress; int size; int capacity; }; DYNAMICARRAY *initialDynamicArray() { DYNAMICARRAY *p (DYNAMICARRAY *)malloc(sizeof(DYNAMICARRAY)); p->size 0; p->capacity 5; p->pAddress (int *)…

数据结构与算法--python版-01

文章目录基本概念数据存储方式算法案例基本概念 程序 数据结构 算法 数据结构&#xff0c;数据的存储&#xff08;物理结构&#xff09;及相互间的关联关系(逻辑结构)&#xff1b; 线性表&#xff08;顺序表、链表、队列、栈&#xff09;&#xff0c;一个前驱&#xff0c;一…

口语语言理解最新进展及前沿

口语语言理解 作为任务型对话系统的核心组件&#xff0c;目的是为了获取用户询问语句的框架语义表示信息&#xff0c;进而将这些信息为对话状态的追踪模块DSTDSTDST, 以及自然语言生成模块NLGNLGNLG所使用 SLUSLUSLU任务通常包含以下两个任务: 意图识别任务: intent detectio…

企企购商城 | 破解降本难题,非生采购“利器”来了

近年来&#xff0c;疫情反复无常&#xff0c;全球市场环境动荡不安&#xff0c;在瞬息万变的环境下&#xff0c;很多企业都处于降本处境&#xff0c;采购降本成了其中的重要一环。其中&#xff0c;非生采购作为贯穿企业各个职能板块的采购活动&#xff0c;众多国际先进的企业已…

应用PID算法对ABS系统的仿真和分析

1、内容简介略635-论文V2 可以交流、咨询、答疑2、内容说明摘要&#xff1a;本文旨在设计一种利用模糊控制理论优化的pid控制器&#xff0c;控制abs系统&#xff0c;达到对滑移率最佳控制范围的要求 &#xff0c;所提出的方案采用级联控制架构&#xff1a;设计用于外环中的车轮…

零基础开始QT绘图(6)

前面我们开始提到了GraphicView的使用&#xff0c;也提到GraphicsItem的使用&#xff0c;并且开始了自定义GraphicsItem的编写&#xff0c;而且上次我们的GraphicsItem也是可以拖动了&#xff0c;但这离我们需要的效果还有一定的距离。 所以&#xff0c;这次&#xff0c;我们进…

工程电磁设备在2018年杭州电磁大会的报告

1 方法原理 本篇是对多频电磁方法,应用的解读。 本汇报讲述了EMI传感器的基本情况,以及用手持多频电磁仪进行实际探测应用的例子。 什么是电磁感应?用发射装置(TX)激发谐波,产生一次场(Primary field),地下导体目标会相应产生涡流电磁场,产生二次场,被接收装置(RX…

「网络安全渗透」如果你还不懂CSRF?这一篇让你彻底掌握

1 什么是 CSRF 面试的时候的著名问题&#xff1a;"谈一谈你对 CSRF 与 SSRF 区别的看法" 这个问题&#xff0c;如果我们用非常通俗的语言讲的话&#xff0c;CSRF 更像是钓鱼的举动&#xff0c;是用户攻击用户的&#xff1b;而对于 SSRF 来说&#xff0c;是由服务器…

14.0、Linux-yum方式安装 docker

14.0、Linux-yum方式安装 docker 第一步&#xff1a; 检测 CentOS7 -> cat /etc/redhat-release 第二步&#xff1a; 用以下命令安装准备环境 -> yum -y install gcc yum -y install gcc-c 第三步&#xff1a; 如果之前安装过 docker 的&#xff0c;先用以下命令删…