小白继续深入学习C++

news2024/11/26 7:34:11
  • 第1节 指针的基本概念

  • 1、变量的地址:

        变量是内存地址的简称,在C++中,每定义一个变量,系统就会给变量分配一块内存,内存是有地址的。
 

C++用运算符&获取变量在内存中的起始地址。
        语法: &变量名

  • 2、指针变量:

        指针变量简称指针,他是一种特殊的变量,专用于存放变量在内存中的起始地址。
        语法: 数据类型 *变量名;

        数据类型必须是合法的C++数据类型(int,char,double或其他自定义的数据类型)。
        星号*与乘法中的星号是相同的,但是,在这个场景中,星号用于表示这个变量是指针。

  •     3、对指针赋值

        不管是整型、浮点型、字符型,还是其他的数据类型的变量,他的地址都是一个十六进制数。我们用整型指针存放整数类型变量的地址;
        用字符型指针存放字符型变量的地址;用浮点型指针存放浮点型变量的地址。
        语法: 指针=&变量名;

  •     4、指针占用的内存

        指针也是变量,是变量就要占用内存空间。
        在64位系统中,不管什么类型的指针,占用的内存都是8字节。

    注意:
        对指针的赋值操作也通俗的呗称为“指向某变量”,被指向的变量的数据类型称为“基类型”。
        如果指针的数据类型与基类型不符,编译会出现警告。但是,可以强制转换他们的类型。

    在C++中,指针是复合数据类型,复合数据类型是指基于其他类型而定义的数据类型,在程序中,int是整型类型,int * 是整型指针类型,
    int * 可以用于声明变量,可以用于sizeof运算符,可以用于数据类型的强制转换,总的来说,把int * 当成一种数据类型就是了。

#include<stdio.h>
#include<iostream>

using namespace std;
int main()
{
	char a = 65;
	int b = 1234;
	float c = 3.14;
	double d = 3.1415926;

	char* pa = &a;
	int* pb = &b;
	float* pc = &c;
	double* pd = &d;

	cout << "a的地址是:" << (void*) & a << endl;    // (char*)是强制类型转换
	cout << "b的地址是:" << (void*)&b << endl;
	cout << "c的地址是:" << (void*)&c << endl;
	cout << "d的地址是:" << (void*)&d << endl;

	cout << "sizeof(a)=:" << sizeof(a) << endl;
	cout << "sizeof(b)=:" << sizeof(b) << endl;
	cout << "sizeof(c)=:" << sizeof(c) << endl;
	cout << "sizeof(d)=:" << sizeof(d) << endl;

	cout << "pa的地址是:" << (int*)pa << endl;  // (int*)是强制类型转换
	cout << "pb的地址是:" << (int*)pb << endl;
	cout << "pc的地址是:" << (int*)pc << endl;
	cout << "pd的地址是:" << (int*)pd << endl;

	cout << "sizeof(*pa)=:" << sizeof(*pa) << endl;
	cout << "sizeof(*pb)=:" << sizeof(*pb) << endl;
	cout << "sizeof(*pc)=:" << sizeof(*pc) << endl;
	cout << "sizeof(*pd)=:" << sizeof(*pd) << endl;
	

	return 0;
}

  • 第2节  使用指针

声明指针变量后,在没有赋值之前,里面是乱七八糟的值,这时候不能使用指针。
    指针存放变量的地址,因此,指针名表示的是地址(就像变量名可以表示变量一样)
    *运算符被称为间接值或解除引用(解引用)运算符,将它用于指针,可以得到该地址的内存中存储的值,*也是乘法符号,C++根据上下文来确定所指的是乘法还是解引用。
    变量和指向变量的指针就像同一枚硬币的两面。

#include<iostream>

using namespace std;
int main()
{
	int a = 8;
	int* pa = &a;

	cout << "a=" << a << endl;
	cout << "*pa=" << *pa << endl;

	*pa = 9;

	cout << "a=" << a << endl;
	cout << "*pa=" << *pa << endl;

	a = 12;

	cout << "a=" << a << endl;
	cout << "*pa=" << *pa << endl;

	return 0;
}

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

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

相关文章

国庆作业 day1

C语言基础考题&#xff08;40&#xff09; 选择题 20分每题2分 1、已知字母A的ASCII码为十进制数值65&#xff0c;且S为字符型&#xff0c;则执行语句SA6-3&#xff1b;后S中的值为 ( ) A.D B.68 C.不确定的值 D.C 2、若有定义语句&#xff1a;int a12;&#xff0c;则执…

Java之线程池的详细解析

1. 线程池 1.1 线程状态介绍 当线程被创建并启动以后&#xff0c;它既不是一启动就进入了执行状态&#xff0c;也不是一直处于执行状态。线程对象在不同的时期有不同的状态。那么Java中的线程存在哪几种状态呢&#xff1f;Java中的线程 状态被定义在了java.lang.Thread.Stat…

安全渗透测试基础之漏洞扫描工具之Nessus使用介绍

前置条件:Nessus工具使用前要确保工具是服务状态 systemctl start nessusd.service 启动nessus服务 systemctl status nessusd.service 查看nessus服务状态 1.配置扫描模板 2.新增高级扫描 2.1 设置日程表: 2.2设置邮件收件人(可选): 2.3主机发现: 2.

软件设计模式系列之二十一——观察者模式

1 观察者模式的定义 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许对象之间建立一对多的依赖关系&#xff0c;当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。这个模式也被称为发布-订阅模式…

Android stdio的Gradle菜单栏无内容问题的解决方法

右边Gradle菜单栏里没有Tasks选项内容的问题 正常情况↓ 如果这个问题如果无法解决的话&#xff0c;Gradle打包就只能通过控制台输入命令来解决&#xff0c;但这无疑是把简单问题复杂化了&#xff0c;我们来看看怎么解决这个问题吧。 这里有几个方法提供&#xff0c;可以自行选…

Ipa Guard软件介绍:启动界面和功能模块全解析,保护你的iOS应用源码

ipaguard界面概览 ipaguard界面分左右2块&#xff1a;左边菜单导航栏&#xff0c;右边的功能区 左侧菜单&#xff1a;按模块分成启动界面&#xff0c;代码模块&#xff0c;文件模块&#xff0c;重签名与测试模块 右侧主功能区会随着功能变化&#xff0c;但是整体分3块&#xf…

Webpack 基础入门以及接入 CSS、Typescript、Babel

一、什么是 Webpack Webpack 是一款 JS 模块化开发的技术框架&#xff0c;其运作原理是将多个 JS 文件关联起来构成可运行的应用程序。 Webpack 拥有丰富的 plugins / loaders 插件生态圈&#xff0c;可以让 js 识别不同的语言如 .css, .scss, .sass, .json, .xml, .ts, .vue…

揭秘:机构招生电子传单制作的五个黄金法则

机构招生微传单制作一直都是让很多人在意的事情。一款好的微传单不仅可以吸引更多的学生&#xff0c;还可以省去很多招生工作的时间和精力。但是&#xff0c;很多人却不知道如何制作一款精美的微传单。下面就让我们来学习一下如何制作一款机构招生的微传单吧。 首先&#xff0c…

聊聊Go与依赖注入

如果你读过Robert C. Martin[1]的《敏捷软件开发&#xff1a;原则、模式与实践》[2](书的封皮见下图)&#xff0c;那么你一定知道经典的SOLID设计原则[3]中的“D”&#xff1a;依赖倒置原则&#xff08;Dependency Inversion Principle, DIP&#xff09;。 依赖倒置原则是面向对…

node版本问题:Error: error:0308010C:digital envelope routines::unsupported

前言 出现这个错误是因为 node.js V17及以后版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制&#xff0c;可能会对生态系统造成一些影响. 在node.js V17以前一些可以正常运行的的应用程序,但是在 V17 及以后版本可能会抛出以下异常: 我重装系…

华为云云耀云服务器L实例评测|部署在线图表和流程图绘制工具drawio

华为云云耀云服务器L实例评测&#xff5c;部署在线图表和流程图绘制工具drawio 一、云耀云服务器L实例介绍1.1 云服务器介绍1.2 优势及其应用场景1.3 支持镜像 二、云耀云服务器L实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 drawio3.1 drawio 介绍3.2 Docker 环…

宝贝详情页制作的7个步骤,一看就懂

对于许多淘宝卖家来说&#xff0c;制作精美的详情页是吸引客户和提升销售的关键。然而&#xff0c;很多卖家可能会因为缺乏设计技能和经验而感到困惑。本文将为您揭示如何使用免费在线海报制作工具&#xff0c;如乔拓云&#xff0c;来制作具有吸引力的详情页&#xff0c;让您在…

基本数据类型在内存中存储形式

目录 内存分区模型 常量 与 变量 常量的定义 #define 与 const 区别 宏与const使用 修改const常量 整数类型 无符号整数 有符号整数 补码 内存分析 浮点数类型 float类型的IEEE编码 double类型的IEEE编码 基本的浮点数指令 数据类型转换分析 浮点数作为返回值…

嵌入式Linux应用开发-基础知识-第十六章GPIO和Pinctrl子系统的使用

嵌入式Linux应用开发-基础知识-第十六章GPIO和Pinctrl子系统的使用 第十六章 GPIO 和 Pinctrl 子系统的使用16.1 Pinctrl 子系统重要概念16.1.1 引入16.1.2 重要概念16.1.3 示例16.1.4 代码中怎么引用pinctrl 16.2 GPIO子系统重要概念16.2.1 引入16.2.2 在设备树中指定引脚16.2…

React 入门笔记

前言 国庆值班把假期拆了个稀碎, 正好不用去看人潮人海, 趁机会赶个晚集入门一下都火这么久的 React 前端技术. 话说其实 n 年前也了解过一丢丢来着, 当时看到一上来就用 JS 写 DOM 的套路直接就给吓退了, 扭头还去看 Vue 了&#x1f923;, 现在从市场份额来看, 确实 React 还…

分析各种表达式求值过程

目录 算术运算与赋值 编译器常用的两种优化方案 常量传播 常量折叠 加法 Debug编译选项组下编译后的汇编代码分析 Release开启02执行效率优先 减法 Release版下优化和加法一致&#xff0c;不再赘述 乘法 除法 算术结果溢出 自增和自减 关系运算与逻辑运算 JCC指…

决胜未来:解锁新科技趋势的无尽可能性

随着科技的飞速发展,我们的未来迈入一个新的时代。无论是人工智能、区块链、大数据、物联网还是机器学习等,这些技术正以前所未有的速度重塑我们的世界和生活。面对这些未来的科技趋势,我们能否抓住其中的机遇并寻找新的突破? 首先&#xff0c;我们来看一看人工智能。人工智能…

2023年中国工业脱水机行业供需分析:随着自动化和智能化技术的快速发展,销量同比增长4.9%[图]

工业脱水机行业是指专门从湿润的固体物料中去除水分的设备制造和相关服务。它广泛应用于食品加工、化工、制药、纺织、环保等行业&#xff0c;用于去除物料中的水分&#xff0c;提高产品质量和降低能耗。 工业脱水机行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研…

基于SpringBoot的师生共评的作业管理系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 课程管理 作业管理 作业互评 小组管理 作业管理 作业评分 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展&#xff0c;无纸化作业变成了一种趋势&#xff0c;针对这个问题开发一个…

【Window10 】删除‘设备和驱动器’中的百度网盘、酷狗音乐、迅雷下载等

原因&#xff1a; 不想在设备里看到它。 解决方案&#xff1a; 打开cmd找到 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace\ 目录在 NameSpace 目录下找到对应的软件目录&#xff0c;删除即可&#xff08;挨个目录的点击进去看…