C++学习之旅 - 指针

news2024/12/23 13:38:51

文章目录

      • 指针的基本概念
      • 指针的定义与使用
      • 指针占用的内存空间
      • 空指针
      • 野指针
      • cont修饰指针
      • 指针&数组
        • 访问数组中第一个元素(访问&指针)
        • 如何访问数组中的第二个字节
      • 指针和函数

指针的基本概念

指针的作用: 可以通过指针间接访问内存

  • 内存编号是从0开始记录的,一般用十六进制数字表示
  • 可以利用指针变量保存地址

指针的定义与使用

指针的语法数据类型* 指针变量名

#include <iostream>
#include "name.h"

using namespace std;


int main(void) {
    
    int a = 10;
    //定义指针
    int* p;
    //让指针记录变量a的地址
    p = &a;

    cout << "a的地址:" << &a << endl;
    cout << "p=" << p << endl;
    return 0;
}

在这里插入图片描述

指针占用的内存空间

#include <iostream>

using namespace std;


int main(void) {

    cout << "sizeof (int *):" << sizeof(int *) << endl;
    cout << "sizeof (float *):" << sizeof(float*) << endl;
    cout << "sizeof (double *):" << sizeof(double*) << endl;
    cout << "sizeof (char *):" << sizeof(char*) << endl;

    return 0;

在这里插入图片描述

我这里是8个字节的原因是我是64位电脑
在这里插入图片描述
你可以在VSstudio中更改
在这里插入图片描述
所以指针占用的空间都一致

空指针

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

用途: 初始化我们的指针变量

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

//有异常
#include <iostream>

using namespace std;


int main(void) {

    int* p = NULL;

    *p = 100;

    return 0;
}


野指针

#include <iostream>
#include "name.h"

using namespace std;


int main(void) {

    int* p = (int*)0x1100;
    cout << *p << endl;

    return 0;
}

在这里插入图片描述

在程序中尽量避免出现这种野指针。

野指针就是随便指向一块非法的内存空间,直接引用

空指针和野指针都不是我们自己申请的空间,不要随便访问

cont修饰指针

  1. const修饰指针(常量指针)
int a = 10;
const int *p = &a

常量指针特点: 指针的指向可以修改,但是指针指向的值不可以修改(p可以指向b但是b的值一定是10)

/*错误的
int a = 10;
const int *p = &a;
a = 20;
*/
int a = 20;
const int *p = &a;
  1. const修饰常量(指针常量)
int a = 20;
int* const p = &a;//指针常量

指针常量和常量指针特点相反:指针指向的值可以改变,但是指针的指向不能改变

  1. const即修饰指针又修饰常量
int a = 30;
const int* const p = &a;

这个特点是指针指向的值和指针的指向都不可以进行改变

指针&数组

目的: 利用指针也可以访问数组中的每一个元素

数组: 一块连续的空间中存放了相同类型的数据元素

int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };

访问数组中第一个元素(访问&指针)

#include <iostream>

using namespace std;


int main(void) {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	cout << "第一个元素为:" << arr[0] << endl;

	int* p = arr;//arr就是数组首地址
	cout << "利用指针访问第一个元素:" << *p << endl;

}

在这里插入图片描述

如何访问数组中的第二个字节

上面写过的访问第一个数据的基础上移动4位(32位操作系统)或8位(64位操作系统)

#include <iostream>

using namespace std;


int main(void) {
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	cout << "第一个元素为:" << arr[0] << endl;

	int* p = arr;//arr就是数组首地址
	cout << "利用指针访问第一个元素:" << *p << endl;

	p++;
	cout << "利用指针访问第二个元素:" << *p << endl;

}

指针和函数

环境: 指针是形参

#include <iostream>

using namespace std;

void swap01(int a,int b) {
	int temp = a;
	a = b;
	b = temp;
	cout << "swap a=" << a <<endl;
	cout << "swap b=" << b <<endl;
}

int main(void) {
	int a = 10;
	int b = 20;
	swap01(a, b);
	cout << "a=" << a <<endl;
	cout << "b=" << b <<endl;

}

以上代码就是之前的值传递(形参影响不到实参)

#include <iostream>

using namespace std;

void swap02(int* a, int* b) {
  int temp = *p1;
  *p1 = *p2;
  *p2 = temp;
  cout << "swap p1=" << *p1 << endl;
  cout << "swap p2=" << *p2 << endl;
}

int main(void) {
	int a = 10;
	int b = 20;
	swap02(&a, &b);
	cout << "a=" << a << endl;
	cout << "b=" << b << endl;

}

在这里插入图片描述

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

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

相关文章

offer收割机再现,接口测试常问面试题 (附答案),对标大厂面试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 软件测试面试题&am…

海外网红营销必备:品牌与海外红人合作的谈判技巧指南

随着社交媒体的飞速发展&#xff0c;海外网红已经成为品牌营销的热门选择。与知名红人合作&#xff0c;可以有效地扩大品牌影响力、提升产品认知度&#xff0c;并吸引目标受众。然而&#xff0c;与红人的谈判过程常常充满挑战&#xff0c;需要品牌营销人员具备一定的技巧和策略…

以太坊是匿名化的影子银行?将如何适应并影响传统金融?

以太坊经常被描述为传统金融权力的对立面。实际上&#xff0c;以太坊的目标并不是去颠覆传统金融领域&#xff0c;而试图去补充和改善它。未来&#xff0c;这两个系统将会有更多的交集。 多极世界中的中立性 以太坊并不是一种隐形的货币替代品和匿名的影子银行&#xff0c;目前…

人才“选用育留”难?做好这步,人力资源或许比你想象的更轻松

人才作为企业生存和发展最重要的资源之一&#xff0c;如何发现、使用、培养、留住优秀人才是所有企业人力资源管理的关键。但在实际场景当中&#xff0c;“招聘流程长造成人才流失”、“员工招聘不精准、效率低”、“员工培育周期长、成本高”、“优秀人才留不住”等问题正深深…

浅入浅出 iptables 网络隔离原理

01 iptables简介 iptables ipfirewall&#xff08;内核1.x时代&#xff09; ipchains&#xff08;内核2.x时代&#xff09; iptables 网络协议栈 Link Layer 数据链路层的数据流向&#xff0c;根据mac寻址找到对应的网卡后向上进入网络层 Network Layer 网络层的数据流向&am…

实训第一天

目录 主流的关系数据库 非关系型数据库 Mysql的启动和停止 Mysql登录方式本地登录 远程登录 查看mysql数据库 创建数据库 使用数据库 删除数据库 Mysql结构化查询语句 mysql 数据类型 数值类型 字符类型 日期类型 唯一约束与主键约束 主流的关系数据库 mysql,db2,oracle&a…

Selenium自动化之弹窗处理

1.前言 我们在使用Selenium做Web自动化测试时&#xff0c;页面经常出现弹窗&#xff0c;如果不处理后续的测试脚本就无法正常运行&#xff0c;今天我们就带大家一起来学习如何处理Web页面上的弹窗。 2.Web页面弹窗的分类 弹窗通常有3种&#xff1a;Alert类型弹框、Confirm类…

人工智能之ChatGPT

前言 近日&#xff0c;美国OpenAI研发的聊天机器人程序ChatGPT爆火&#xff0c;相关话题多次引发热议。 ChatGPT是啥&#xff1f; 简单来说&#xff0c;ChatGPT是一个智能聊天机器人&#xff0c;但是它的功能却远不止聊天 利用机器学习算法&#xff0c;ChatGPT可以利用人工智…

SVN搭建ubuntu服务器过程(图文超详细)

目录 步骤0&#xff1a;搭建环境&#xff1a; 步骤一&#xff1a;下载subversion安装包 步骤二&#xff1a;创建版本库目录 步骤三&#xff1a;创建版本库 步骤四&#xff1a;修改SVN配置 步骤五&#xff1a;重启SVN服务 步骤0&#xff1a;搭建环境&#xff1a; 在ubuntu…

仙境传说RO:添加地图传送门教程

仙境传说RO&#xff1a;添加地图传送门教程 大家好我是艾西&#xff0c;上一篇文章中我跟大家分享了仙境传说RO怎么添加NPC&#xff0c;NPC可以加入自己想要售卖的装备物品等。那么对于玩家跑地图需要手动跑肯定是不方便的毕竟大家玩游戏就是为了娱乐以及放松&#xff0c;那么…

降本增效,StarRocks 在同程旅行的实践

作者&#xff1a;周涛 同程旅行数据中心大数据研发工程师 同程旅行是中国在线旅游行业的创新者和市场领导者。作为一家一站式平台&#xff0c;同程旅行致力于满足用户旅游需求&#xff0c;秉持 "让旅行更简单、更快乐" 的使命&#xff0c;主要通过包括微信小程序、AP…

深浅拷贝及赋值区别理解

浅拷贝&#xff1a; 对象浅拷贝Object.assign() 数组的浅拷贝Array.prototype.slice()与Array.prototype.concat() 解构赋值 1.对于数组/对象中基本数据类型[123,234]&#xff0c;拷贝的是数值&#xff0c;所以修改拷贝后的这个值&#xff0c;原数据不会改变&#xff1b;2.对…

Java面对对象三大特性之封装】

目录 1.封装2. 访问权限2.1 public权限2.2private权限2.3 默认权限 3.包的定义4. static成员5.静态成员初始化6.对象的打印 1.封装 封装&#xff1a;就是将数据和操作数据的方法进行结合&#xff0c;隐藏对象的属性和方法&#xff0c;仅对外实现一些接口和对象进行交互 其实就是…

中国振华刘昕:携手用友打造电子行业的数智化平台,服务全行业

近期&#xff0c;一年一度的用友BIP技术大会圆满召开。来自行业领先企业的CIO/CDO、生态伙伴、开发者、分析师、媒体等共聚北京用友产业园&#xff0c;了解最新技术发展趋势、探讨行业热点话题。期间&#xff0c;中国振华电子集团有限公司信息中心主任兼研究院副院长刘昕在数科…

layui(2)----页面元素

水平导航栏 依赖加载模块&#xff1a;element <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport"…

目标检测算法:YOLO v1论文解读

目标检测算法&#xff1a;YOLO v1论文解读 前言 ​ 其实网上已经有很多很好的解读各种论文的文章了&#xff0c;但是我决定自己也写一写&#xff0c;当然&#xff0c;我的主要目的就是帮助自己梳理、深入理解论文&#xff0c;因为写文章&#xff0c;你必须把你所写的东西表达清…

zigbee 模拟密码解密

代码&#xff1a; #include "iocc2530.h"#define uchar unsigned char #define uint unsigned int#define D3 P1_0 #define D4 P1_1 #define D5 P1_3 #define D6 P1_4#define SW1 P1_2 #define SW2 P0_1#define LIGHT P1_7void delay_ms(int x){for(int i0;i<x;i…

docker卷--docker volumes 使用学习

一、在Docker中管理数据 1.1、Docker 保存容器数据的方法 Docker 卷&#xff08;Docker Volumes&#xff09;&#xff1a;可以将数据保存在 Docker 卷中&#xff0c;这样可以在容器和宿主机之间共享数据&#xff0c;并保证容器中的数据不会因为容器被删除而丢失。Docker 卷可以…

Vivado_除法器 IP核

本文介绍使用Vivado中除法器Divider Generator&#xff08;5.1&#xff09;的使用方法。 参考资料&#xff1a;pg151 文章目录 Divider Generator仿真测试 Divider Generator Channel Settings选项卡 #Common Options&#xff1a; Algorithm Type: 一共有三种类型&#xff0c;…

如何才能做好企业内部客服知识管理?

企业内部客服知识管理是指企业通过对客户服务过程中所涉及的信息、知识和技能进行系统化、规范化、科学化、数字化的管理&#xff0c;提高企业内部客服人员的服务质量和效率&#xff0c;帮助企业提高客户满意度&#xff0c;增强客户黏性&#xff0c;提高企业的市场竞争力。本文…