C++入门基础01:指针与引用

news2024/10/7 6:43:26

C++入门基础:指针与引用

指针

#include <iostream>
//系统定义头文件一般是尖括号
#include<fstream>
#include<string>
using namespace std;

//引用与指针
//是复合数据类型,与基本数据类型int、double这类是不一样的
//指针存储的是一个变量或者对象的地址

int main()
{
   //一、指针:
    //先定义一个普通的数据类型
    int a = 10;
    //定义一个指针
    //1、定义指针指向的数据类型,int*表示指向int类型的一个指针。
    //2、p表示指针的名称。这里p可以赋予nullptr空指针,但是必须要赋值。
    //3、如果想要p指针指向a,那么就将a的地址(&a)付给p指针。
	int* p = &a;
    //输出来看一下:
    //将*放在指针名的前面,*p表示取得指针所指向的内容,这个过程就叫做解引用。
    cout << "p指向的内容是:" << *p << endl;
    cout << "p的值为:" << p << endl;

    //二、空指针
    int* q = nullptr; //空指针不指向任何对象。所以不能取空指针所对应的值,否则会发生错误。
    // cout << "q指向的内容是:" << *q << endl; //这句是有问题的
    cout << "q的值为:" << q << endl;
    
    return 0;
}

在这里插入图片描述
**使用指针的优点和必要性: **
1、指针能够有效的表示数据结构,如链表;
有的时候我们要实现一些复杂的数据结构,比如说链表。
使用链表是为了保存不连续的数据存储。
在这里插入图片描述
2、能动态分配内存,实现内存的自由管理;
3、便捷高效的使用数组,如C风格字符串使用;
4、指针传参:值传递不如地址传递高效,因为值传递先从实参的地址中取出值,在赋值给形参带入函数使用;而指针则把形参的地址直接指向实参地址,使用时直接取出数据,效率提高。

引用

是在C++中才引入的一种数据类型。在C语言中是没有这个数据类型的。
引用主要用于引用传参,通过引用传参可以在函数里面修改变量的值,通过这个参数将修改后的结果回传。

指针和引用的区别
1、引用必须被初始化(初始值必须是一个对象),指针不必须(但最好要初始化)。
2、引用初始化以后不能被改变,指针可以改变所指的对象。
3、不存在指向空值的引用,但是存在指向空值的指针。
4、指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
5、指针是一个对象,可以定义指向指针的指针。但引用不是对象,没有实际地址,所以不能定义指向引用的指针,也不能定义指向引用的引用。

#include <iostream>
//系统定义头文件一般是尖括号
#include<fstream>
#include<string>
using namespace std;

//引用与指针
//是复合数据类型,与基本数据类型int、double这类是不一样的
//指针存储的是一个变量或者对象的地址

int main()
{
   //一、指针============================
    //先定义一个普通的数据类型
    int a = 10;
    //定义一个指针
    //1、定义指针指向的数据类型,int*表示指向int类型的一个指针。
    //2、p表示指针的名称。这里p可以赋予nullptr空指针,但是必须要赋值。
    //3、如果想要p指针指向a,那么就将a的地址(&a)付给p指针。
	int* p = &a;
    //输出来看一下:
    //将*放在指针名的前面,*p表示取得指针所指向的内容,这个过程就叫做解引用。
    cout << "p指向的内容是:" << *p << endl;
    cout << "p的值为:" << p << endl;

    //二、空指针============================
    int* q = nullptr; //空指针不指向任何对象。所以不能取空指针所对应的值,否则会发生错误。
    //cout << "q指向的内容是:" << *q << endl; //这里会报错,不能取空指针所对应的值。
    cout << "q的值为:" << q << endl;

    //三、引用============================
    //是在C++中才引入的一种数据类型。在C语言中是没有这个数据类型的。
    int b = 10;
    //引用定义时,初始化时需要绑定一个对象。如果我们直接定义一个引用不给绑定一个初始化对象,就会报错。
    //因此引用创建时必须初始化,即绑定一个初始化对象。
    int& ref = b;
    // int& ref1; //这里会报错,引用创建时必须初始化。
    cout << "ref:" << ref << endl;

    ref++;
    cout << "ref:" << ref << endl;
    //这里我们再查看一下变量b,变量b会随着ref引用的变化而变化,引用是变量b的一个别名,对引用的操作就是对变量本身的操作。
    cout << "b:" << b << endl;

    return 0;
}

在这里插入图片描述

其他内容

1、#include ,iostream是指iostream库。iostream的意思是输入输出流,直接点说就是in(输入) out(输出) stream(流),取in、out的首字母与stream合成。
iostream 库的基础是两种命名为 istream 和 ostream 的类型,分别表示输入流和输出流。流是指要从某种 IO 设备上读出或写入的字符序列。术语“流”试图说明字符是随着时间顺序生成或消耗的。

2、自定义的头文件,自定义的就不可以通过尖括号这种形式了。例如:#include “test.h”。

3、调用cout这个函数进行内容输出。cout是在std命名空间之下的。这里如果想不加std::,就需要在上方声明std的使用using namespace std,using namespace std这样就限定了在std的这个命名空间中去找函数。std就是标准库。

4、运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单;调试程序: F5 或调试 >“开始调试”菜单

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

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

相关文章

Java集合框架详解(一)Collection接口、List接口、ArrayList类、Vector类

一、集合架构图 二、Collection接口 Collection集合的遍历 迭代器&#xff1a;Iterater 方法名称备注Iterater Iterater()返回在此collection的元素上进行迭代的迭代器boolean hasNext()如果有元素可以迭代&#xff0c;返回true&#xff0c;否则返回falseE next()返回迭代的下…

Kafka - Kafka生产者|发送消息|分区策略|提高吞吐量|数据可靠性|数据去重|数据有序

文章目录1. Kafka 生产者2. 生产者发送消息1. 生产者异步发送消息2. 生产者异步发送消息带回调函数3. 生产者同步发送消息3. 生产者发送消息的分区策略1. Kafka 分区好处2. 分区器 DefaultPartitioner 和 ProducerRecord 源码3. 指定 partition 的情况4. 没有指定 partition 但…

从零集成mybatis-plus

Mybatis-Plus特性&#xff1a; 无侵入&#xff0c;即引入它不会对现有工程产生影响。损耗小&#xff0c;启动就会自动注入基本的CRUD&#xff0c;内置通用Mapper、Service等&#xff0c;基本能满足大部分需求。支持主键自动生成&#xff0c;其中包括分布式唯一ID生成器Sequenc…

PTA题目 分段计算居民水费

为鼓励居民节约用水&#xff0c;自来水公司采取按用水量阶梯式计价的办法&#xff0c;居民应交水费y&#xff08;元&#xff09;与月用水量x&#xff08;吨&#xff09;相关&#xff1a;当x不超过15吨时&#xff0c;y4x/3&#xff1b;超过后&#xff0c;y2.5x−17.5。请编写程序…

[附源码]java毕业设计时事资讯平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

黑*头条_第1章_项目介绍和工程搭建

黑*头条_第1章_项目介绍和工程搭建 文章目录黑*头条_第1章_项目介绍和工程搭建学习目标1. 项目介绍1.1项目背景1.2 项目概述1.3 项目术语定义2. 项目需求2.1 APP主要功能大纲2.2 APP用例图&#xff08;主要功能&#xff09;2.3 WEMEDIA功能大纲2.4 WEMEDIA用例图&#xff08;主…

STM32嵌入式工程师自我修养

STM32嵌入式工程师自我修养一、STM32必备技能二、程序员必须熟知三、学习STM32自备资料和硬件一、STM32必备技能 1、熟悉 C 语言编程&#xff0c;熟练 STM32CUBEMX,Keil 开发环境。 2、熟悉基于STM32 MCU开发&#xff0c;掌GPIO,TIME,PWM,ADC等外设开发。 3、熟悉USART,IIC,SP…

快速熟悉C++之常用语法

函数重载&#xff08;Overload&#xff09; 规则 函数名相同 参数个数不同、参数类型不同、参数顺序不同 ◼ 注意 返回值类型与函数重载无关 调用函数时&#xff0c;实参的隐式类型转换可能会产生二义性 ◼ 本质 采用了name mangling或者叫name decoration技术 ✓…

Java锁对象

Java锁 1. 对象头 1.1 简介 以32位的 JVM 为例&#xff0c;每个Java对象的对象头都包含了如下信息 # 组成 Mark Word: 锁的信息&#xff0c;hashcode&#xff0c;垃圾回收器标志 Klass Word: 指针&#xff0c;包含当前对象的Class对象的地址&#xff0c;类对象来确…

基于python的校园社团管理系统的设计与实现

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&…

JS 类总结

类 class 关键字是 ES6 新增的。类&#xff08;class&#xff09;是ECMAScript 中新的基础性语法糖&#xff0c;本质上还是一个函数&#xff0c;但实际上它使用的仍然是原型和构造函数的概念。并且类受块级作用域限制。 class Person { } console.log(Person);// class Perso…

Java无锁并发

共享资源 1. 不安全场景 package com.nike.erick.d05;import lombok.Getter;import java.util.concurrent.TimeUnit;public class Demo01 {public static void main(String[] args) throws InterruptedException {BankService bankService new BankService();for (int i 0;…

H5 app开启web调试

前言&#xff1a; 在Android app逆向时&#xff0c;H5类型的app的加密通常在js中&#xff0c;所以就需要一种手段来查看源代码&#xff0c;查看加密过程。 0、如何确认h5 app 以狗东为例&#xff1a; 随便选择一个元素&#xff0c;可以看到是控件下的一个类 通过与H5类型的ap…

[附源码]SSM计算机毕业设计在线课程网站JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于java_ssm_vue鲜花在线销售商城网站-计算机毕业设计

现在&#xff0c;许多人都喜欢在节日的时候给家人或朋友送鲜花&#xff0c;但是有时候会因为工作忙而忘记或者是没有时间自己去买&#xff0c;同时也有些人觉得自己去买有些麻烦&#xff0c;所以鲜花网络销售是很有必要的。这个网站应该可以提供提前预定、送货上门等服务。首先…

Arduino开发实例-MAX30100传感器模块连接问题解决

MAX30100传感器模块连接问题解决 MAX30100 是一款集成脉搏血氧饱和度和心率监测传感器解决方案。 它结合了两个 LED、一个光电探测器、优化的光学器件和低噪声模拟信号处理,以检测脉搏血氧饱和度和心率信号。 MAX30100 采用 1.8V 和 3.3V 电源供电,可通过软件关断,待机电流…

【Java第33期】:在普通的Maven项目中存储Bean对象并获取和使用

作者&#xff1a;有只小猪飞走啦 博客地址&#xff1a;https://blog.csdn.net/m0_62262008?typeblog 内容&#xff1a;存储Bean对象&#xff0c;再在Spring中获取Bean对象&#xff0c;对其进行使用。 文章目录前言一&#xff0c;存储Bean对象1&#xff0c;创建Bean对象2&…

过控Matlab-串级控制系统的参数整定(二)

太原理工大学过程控制实验之串级控制系统的参数整定 过控Matlab-串级控制系统的参数整定实验内容1.根据动态特性参数法对简单控制系统的控制器参数整定2.根据稳定边界方法对简单控制系统的控制器参数整定利用稳定边界法&#xff0c;分别计算系统采用P、PI、PID调节规律时的PID控…

玩机搞机---关于安卓机型工厂固件 刷机 端口解密 解bl锁 写串 nv损坏 等相关常识

*******工程机和工厂固件方面的常识 可能很多玩机友友对什么是工厂固件比较陌生。那么今天的话题就围绕这个和大家讨论下。其实一般厂家的流程都是在一部机型推放市场之前&#xff0c;需要经过预研企划、研发设计、全面测试等诸多环节。在这一整个改善的全过程中&#xff0c;厂…

使用Eclipse搭建STM32嵌入式开发环境

1. Eclipse 软件和相关工具的安装 使用 Eclipse 开发 STM32 等嵌入式软件项目时&#xff0c;需要安装的软件或者工具有&#xff1a; Eclipse 软件本身&#xff0c;eclipse-inst-jre-win64.exe交叉编译工具链&#xff0c;gcc-arm-none-eabi-10.3-2021.10-win32make 构建工具&a…