C++指针

本文章对C++指针的使用做一个全面的阐述与解释

1.1指针的定义使用

指针: 通过指针间接访问内存
指针就是地址
看下面代码:

#include<iostream>
using namespace std;
int main(){
        //1、定义指针
        int * p;
        int a = 10;

        //2、使用指针
        p = &a;
        cout<<"a的地址为: "<<&a<<endl;
        cout<<"p的值为: "<<p<<endl;
        cout<<"*p的值为: "<<*p<<endl;
        return 0;
}
~                

在这里插入图片描述
上述代码利用取地址运算符得到a的地址;并打印p的值,二者结果相等;因此p=&a;p就代表了a的地址;再通过解引用的方式来找到指针指向的内存:*p
因此之后可以通过操作 *p而间接操作a,也就是说改变 *p的值,a的值也会随之改变。

1.2指针所占内存空间

虽然指针指向的是内存地址,但指针本身需要地址去存储,但类型特殊,用多大内存去存储呢?
公认下,在32位操作系统下,占用4个字节空间;64位下占8个字节空间。大部分都是32位,因此该情况位默认。
C++中利用sizeof()函数查询数据类型占多大空间,如下:

		cout<<"---------------------------"<<endl;
        cout<<"sizeof(p) = "<<sizeof(p)<<endl;
        cout<<"sizeof(int *) = "<<sizeof(int*)<<endl;
        cout<<"sizeof(*p) = "<<sizeof(*p)<<endl;
        cout<<"sizeof(int) = "<<sizeof(int)<<endl;
        cout<<"sizeof(float) = "<<sizeof(float)<<endl;

在这里插入图片描述

p是int类型的数据,结果得,目前是64位操作系统,指针占8个字节空间。
顺便看了看
p,此时与int类型相同,证明了第一节中说的 * p 代表a的说法。对于64位操作系统,无论什么类型指针,都占8个字节内存(char* ;double*;float*;int*)

1.3 空指针和野指针

空指针: 指针变量指向内存中编号为0的空间
用于指针的初始化;空指针指向的内存是不能访问的
0-255是系统内存,不允许访问

**野指针: ** 指针变量指向非法的内存空间
指针指向了一片没有开辟的内存。语法没有错误,但无法运行。

所以空指针和野指针都不是我们申请的内存,因此不要访问

1.4 const修饰指针

1.常量指针 ------ const int *p = &a
指针的指向可以修改,但指针指向的值不可以修改;
即p现在指向a的地址,现在可以将p指向另一个变量地址,这个操作允许;但p指向a的地址,a的值不允许更改!

2.指针常量 -----int *const p = &a
指针的指向不可以修改,但指针指向的值可以修改;
即p现在指向a的地址,现在可以修改a的值,这个操作允许;但不可以将p的指向修改,即指向别的指针!

3.const即修饰指针,又修饰常量 ----const int* const p = &a;
指针的指向不可以修改,指针指向的值也不可以修改

1.5 指针和数组

这里说的是,数组名代表得就是数组首地址,而指针p指向的也是地址,因此可以将指针直接指向数组,表示数组的第一个值

int arr[] = {1,2,3,4,5,6,7,8,9,10};
int *p = arr;
cout<<*p<<endl;
//结果是1

p++;
//表示指针向后移动四个字节
cout<<*p<<endl;
//结果是2

1.6 指针和函数

函数参数传递,如果是值传递,函数内部修改不会影响主函数的参数值;如果想要在函数内部修改影响到外面主函数中的参数值,就要给函数传递参数的地址(&),之后函数参数类型为指针,表示用指针去接受传入的地址,然后指针解引用访问参数值,因为直接访问的是地址,因此主函数值也会改变

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言—每日选择题—Day53

指针相关博客 打响指针的第一枪&#xff1a;指针家族-CSDN博客 深入理解&#xff1a;指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 有以下程序&#xff0c;输出的结果为&#xff08;&#xff09; #include <stdio.h> int main() {char a H;a (a > A &&…

PyTorch机器学习与深度学习

近年来&#xff0c;随着AlphaGo、无人驾驶汽车、医学影像智慧辅助诊疗、ImageNet竞赛等热点事件的发生&#xff0c;人工智能迎来了新一轮的发展浪潮。尤其是深度学习技术&#xff0c;在许多行业都取得了颠覆性的成果。另外&#xff0c;近年来&#xff0c;Pytorch深度学习框架受…

电机(按工作电源分类)介绍

文章目录 一、什么是电机&#xff1f;二、按工作电源分类直流电机1.直流有刷电机结构工作原理&#xff1a;直流减速电机 2.直流无刷电机结构工作原理&#xff1a; 3.总结结构和工作原理&#xff1a;效率和功率损耗&#xff1a;调速性能&#xff1a;寿命和可靠性&#xff1a;应用…

梯形加减速点动功能块(SMART PLC梯形图)

博途PLC的梯形加减速点动功能块算法和源代码介绍请查看下面文章链接: https://rxxw-control.blog.csdn.net/article/details/133185836https://rxxw-control.blog.csdn.net/article/details/133185836 1、梯形加减速速度曲线 2、梯形加减速点动功能块 3、接口定义

mmpose 使用笔记

目录 自己整理的可以跑通的代码&#xff1a; 图片demo&#xff1a; 检测加关键点 自己整理的可以跑通的代码&#xff1a; 最强姿态模型 mmpose 使用实例-CSDN博客 图片demo&#xff1a; python demo/image_demo.py \tests/data/coco/000000000785.jpg \configs/body_2d_k…

在 linux上运行 Scratch,找到了更github 的项目地址,而且找到了scratch的官方项目。

1&#xff0c;关于Scratch Scratch 是麻省理工学院的“终身幼儿园团队”发布的一种图形化编程工具&#xff0c; 主要面对全球青少年开放&#xff0c;所有人都可以在软件中创作自己的程序。 2&#xff0c;在linux 上面还真有个默认的 scratch 版本 但是太老旧了。 于是找了下…

孩子还是有一颗网安梦——Bandit通关教程:Level 15 → Level 16

&#x1f575;️‍♂️ 专栏《解密游戏-Bandit》 &#x1f310; 游戏官网&#xff1a; Bandit游戏 &#x1f3ae; 游戏简介&#xff1a; Bandit游戏专为网络安全初学者设计&#xff0c;通过一系列级别挑战玩家&#xff0c;从Level0开始&#xff0c;逐步学习基础命令行和安全概念…

Linux IO调度器介绍

Linux系统提供了多种IO调度器&#xff08;I/O Scheduler&#xff09;&#xff0c;每种调度器都有其独特的设计原理和优化目标。以下是一些常见的Linux IO调度器&#xff1a; Noop调度器&#xff1a;Noop&#xff08;No Operation&#xff09;调度器是最简单的IO调度器&#xff…

TaxtArea中内嵌一张放松图片,该图片实现属性悬浮放大功能

TaxtArea中内嵌一张发送图片&#xff0c;该图片实现属性悬浮放大功能&#xff0c;离开还原效果&#xff0c;点击发送按钮后&#xff0c;发送图片变为loading&#xff0c; <div class"textarea-wrapper" ><a-textarearef"textArea"v-model.trim&q…

每天五分钟计算机视觉:谷歌的Inception模块的计算成本的问题

计算成本 Inception 层还有一个问题,就是计算成本的问题,我们来看一下55 过滤器在该模块中的计算成本。 原始图片为28*28*192经过32个5*5的过滤操作,它的计算成本为: 我们输出28*28*32个数字,对于输出的每个数字来说,你都需要执行 55192 (5*5为卷积核的大小,192为通道…

【Java 并发】三大特性

在 Java 的高并发中&#xff0c;对于线程并发问题的分析通常可以通过 2 个主核心进行分析 JMM 抽象内存模型和 Happens-Before 规则三大特性: 原子性, 有序性和可见性 JMM 抽象内存模型和 Happens-Before 规则, 前面我们讨论过了。这里讨论一下三大特性。 1 原子性 定义: 一个…

Docker部署MinIO对象存储服务器结合内网穿透实现远程访问

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…

飞天使-jumpserver-docker跳板机安装

文章目录 jumpserverdocker 更新到最新下载安装包mysql启动mysql 命令 验证字符集,创建数据库使用jumpserver 进行连接测试 redis部署jumpserver 写入变量建jumpserver 容器正确输出登录验证 jumpserver 基础要求 硬件配置: 2 个 CPU 核心, 4G 内存, 50G 硬盘&#xff08;最低…

2023.12.18Linux部署项目

动态查看最新内容 防火墙不能杀毒&#xff0c;只能限制服务器的哪些端口可以被访问 哪些主机可以访问本服务器 防火墙开启之后默认封闭所有端口&#xff0c;自己再用策略声明把哪些端口放开 ksh jdk&#xff1a;二进制包 MySQL&#xff1a;rpm包 Redis&#xff1a;源码…

PyQt6 QFrame分割线控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计46条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

hping3

Hping3 Hping3的介绍&#xff1a; 是一款网络的测试工具&#xff0c;一般用于网络安全员用来进行防火墙的测试等抗压测试。 Hping3的帮助面板: -h –help显示帮助 -v –version显示版本信息 -c –count 限制发包数 -i –interval nterval 指定发包间隔为多少毫秒&#…

Uniapp上传下载文件-不限制文件类型-附详细代码解析

Uniapp上传下载文件&#xff0c;不限制文件类型 1 知识小课堂1.1 Uniapp简介1.2 文件上传1.3 文件下载 2 Uniapp上传文件3 Uniapp 下载文件 1 知识小课堂 1.1 Uniapp简介 UniApp是一款跨平台应用程序开发框架&#xff0c;它允许开发者使用同一套代码来构建基于多个操作系统的应…

以低成本实现高转化:搭建年入百万的知识付费网站的技巧与方法

明理信息科技知识付费平台 一、引言 随着知识经济的崛起&#xff0c;越来越多的知识提供者希望搭建自己的知识付费平台。然而&#xff0c;对于新手来说&#xff0c;如何以低成本、高效率地实现这一目标&#xff0c;同时满足自身需求并提高客户转化率&#xff0c;是一大挑战。…

Ubuntu 常用命令之 cat 命令用法介绍

cat是一个常用的命令行工具&#xff0c;它用于连接和显示文件的内容。cat这个名字来源于它的功能 - concatenate(连接)。 以下是cat命令的一些基本用法 &#x1f447;显示文件内容&#xff1a;cat后面跟上文件名&#xff0c;就可以在终端显示出文件的内容。例如&#xff0c;c…

3分钟让你学会axios在vue项目中的基本用法(建议收藏)

目录 Axios Axios简介 一、axios是干啥的 二、安装使用 三、Axios请求方式 1、axios可以请求的方法&#xff1a; 2、get请求 3、post请求 4、put和patch请求 5、delete请求 6、并发请求 四、Axios实例 1、创建axios实例 2、axios全局配置 3、axios实例配置 4、…