首页 > 编程语言 >C++学习之路——第二天(指针和引用)

C++学习之路——第二天(指针和引用)

时间:2024-07-23 21:28:40浏览次数:10  
标签:指向 int 第一层 C++ 二维 引用 数组 指针

指针和二维数组

概述:不管是几维数组,当你使用数组名 a 而没有取地址操作符&时,它(a)都会退化为指向其第一层的指针。(一维数组指向首元素的指针,二维数组是第一行数组的指针,三维数组是指向其第一层(也就是第一个二维数组)的指针)

1、错误示范

    int a[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
    int **p = a; //错误

a value of type "int (*)[4]" cannot be used to initialize an entity of type "int **"

原因:二维数组名(在没有被取地址操作符&作用时)会退化为指向其第一行第一个元素的一级指针,即 a 会被当作 int (*)[4] 类型的值,这是一个指向包含 4 个整数的数组的指针。

2、正确示范

    int a[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
    int (*p)[4] = a;

此时 p 为指向包含 4 个整数的(一维)数组的指针。

3、三维数组情况?

    int a[2][3][4];
    int(*p)[3][4] = a;

a 的类型是 int(*)[3][4],此时 p 指向的是一个三维数组,p[0]指向的是一个二维数组,p[0][0]指向的是一个一维数组。

总结:不管是几维数组,当你使用数组名 a 而没有取地址操作符&时,它(a)都会退化为指向其第一层的指针。(一维数组指向首元素的指针,二维数组是第一行数组的指针,三维数组是指向其第一层(也就是第一个二维数组)的指针)

补充:

    int b = 1;
    int *p1 = &b;
    cout << sizeof(int) << endl; //4
    cout << sizeof(p1) << endl;  //8

在大多数现代计算机系统中,指针的大小通常是固定的,不论它指向的是什么类型的数据。在 32 位系统中,指针通常是 4 个字节,而在 64 位系统中,指针通常是 8 个字节。我的电脑是 64 位系统,所以 sizeof(p1)是 8。

标签:指向,int,第一层,C++,二维,引用,数组,指针
From: https://www.cnblogs.com/sherioc/p/18319683

相关文章

  • C++_模板(初阶)
    C++_模板(初阶)泛型编程如何实现一个通用的交换函数呢?voidSwap(int&left,int&right){inttemp=left;left=right;right=temp;}voidSwap(double&left,double&right){doubletemp=left;left=right;right=temp;}v......
  • 【Qt项目制作普通计算器】C++语言
    目录一、概述二、界面设计三、程序代码1、程序代码存放位置2、widget.h文件3、widget.cpp4、main.cpp5、.pro文件6、资源文件的添加一、概述1.规划与设计功能确定:决定计算器将支持哪些基本运算(加、减、乘、除、百分之、平方、开根号、变分数等)。界面设计:设计用......
  • 简单理解【指针数组】与【数组指针】
    2024-07-22笔记-42024-07-23补充笔记【指针数组】顾名思义,就是用来存储地址的数组,所有的元素全中存储的全部都是地址,每一个元素都可以理解为是一个指针变量。char*arr[10];int*arr2[10];char**arr3[5];①举例,多种访问方式intarr[5]={1,2,3,4,5},ar......
  • 数组和指针的关系,const修饰指针
     数组和指针的关系 const修饰指针总结:const修饰谁谁就不能变      const修饰*( const在* 前)          不能改变*p的值,可以改变p的指向     const修饰p(const在*后)          不能改变p的指向,可以改......
  • 条件编译,指针
    条件编译 指针指针的常见用法   int a = 100;    int b = 200;    int *p = NULL;    int *q = NULL;    p = &a;    q = &b;假设a的地址为0x00000001,b的地址为0x00000005,p指向a,q指向b含义abpq*p*qp = &b让p......
  • C++核心编程-4、类和对象4—多态
    4.7多态4.7.1多态的基本语法 示例代码如下:#include<iostream>usingnamespacestd;//多态的基本概念//满足动态多态的条件:1、有继承的关系2、子类要重写父类的虚函数//重写:函数返回值类型函数名参数列表完全相同//动态多态的使用://父类的指针或者引用执行......
  • C++3算法比较第一期
    目录1.递推(Iteration)2.递归(Recursion)3.动态规划(DynamicProgramming,DP)递推、递归与动态规划的区别在C++编程中,递推、递归和动态规划是三种重要的算法思想,它们在解决复杂问题时各有特色。下面将分别介绍这三种算法思想,并探讨它们之间的区别。1.递推(Iteration)定义......
  • C++学习笔记(01)——使用VS Code进行C++函数分文件编写
    首先需要下载安装:C/C++ProjectGenerator扩展,就是下图这玩意:下载安装完成后,按ctrl+shift+p打开命令面板,输入createC++project,按回车后可以选择保存工程的文件夹创建好会后生成几个目录:.vscode:里面放一些配置文件之类的,如launch.json、setting.json、tasks.jsoninclude:存......
  • C++题目:DNA排序 代码
    题目描述现在有一些长度相等的 ......
  • 2024年华为OD机试真题-执行时长-C++-OD统一考试(C卷D卷)
    2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集) 题目描述:为了充分发挥GPU算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务,假设GPU最多一次执行n个任务,一次执行耗时1秒,在保证GPU......