int a,int *a,int**a,int (*a)[10] 和int *a[10] 的区别,数组引用

int (*a)[10] 和 int *a[10] 的区别 数组与指针 类别 阅读详情
AI摘要

本文深入解析C++中int*a[10]与int(*a)[10]的区别,探讨指针与数组的关系,解释int**a与int(*a)[10]的差异,同时介绍数组引用的概念及应用。

首先说一下以下性质

a) int a;表示一个内存空间,这个空间用来存放一个整数(int);
b)  int* a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数的空间,即a)中提到的空间;
c)  int** a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放指针的空间,并且指向的这个空间中的指针,指向一个整数。也简单的说,指向了一个b)中提到的空间;                                                                                                              d) int (*a)[10];表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个长度为10、类型为int的数组;和int** a的区别在于,++、+=1之后的结果不一样,其他用法基本相同。

一、int *a[10] 和 int(*a)[10] 的区别

int *a[10] :数组指针。数组a里存放的是10个int型指针                                                                                                                    int (*a)[10] :a是指针,指向一个数组。此数组有10个int型元素
int *a[10]
先找到声明符a,然后向右看,有[]说明a是个数组,再向左看,是int *,说明数组中的每个元素是int *。所以这是一个存放int指针的数组。
int(*a)[10]
先找到声明符a,被括号括着,先看括号内的(优先级高),然后向右看,没有,向左看,是*,说明s是个指针,什么指针?在看括号外面的,先向右看,有[] 是个数组,说明a是个志向数组的指针,再向左看,是int,说明数组的每个元素是int。所以,这是一个指向存放int的数组的指针。

 二、int **a 和 int(*a)[10]的区别

分析一下程序

int tt[10];

int (*a)[10] = &tt;    // 其实 a是二维指针  **a等于2, 但是不让这样赋值 int **a = &tt; 但让下面这样赋值。
int (*a)[10] = &tt; 类似于int *b = tt, int **a = &b; (因为不能直接这样赋值 int **a = &tt);  但是也不一样。
若 int (*a)[10] = &tt 这样赋值,**a等于2, *a输出 7339472,a也等于7339472。
若这样赋值  int *b = tt, int **a = &b; **a 等于2,*a 等于7339472,a等于 7339512,两者是有差异的。                                          但是两者这样赋值之后 int *k = *a; 都可以这样输出  printf("%d", *k); 所以我说类似,应该是 数组名的地址想要直接赋值给地址的话,应该只能 int (*a)[10] = &tt;(但是仔细想想,数组名不就是一个地址吗,数组名的地址不就是,地址的地址吗,也就是二维指针了,所以我说和**a类似)

#include<iostream>
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;

int main()
{
	int tt[10];
	for(int i = 0;i<10;i++)
		tt[i] = i+2;	
	/*
	int *b = tt;
	int **a = &b; 
	int *k = *a;   // 二维指针变一维指针
	*/
	// 或者这样赋值 
		
	int (*a)[10] = &tt;
	int *k = *a;  // 二维指针变一维指针
	
	//printf("%d", **a);   **a这样输出结果为2  *a输出7339472 一个地址值。 
	for(int i = 0;i<10;i++)
	{
		if(i!=0) cout <<" " ; 	
		//printf("%d ", *(*a+i));  // 还可以这样输出
		printf("%d", *k);
		//a = a + 1; 
		k++;		
	}	
}

当这样赋值时,int (*a)[10] = &tt; 不管是 a++,还是a+=1,输出的 **a都是乱码(除第一次输出外,第一次输出2);

三  数组引用 

	(1)	数组引用,arrRef 相对于 arr 的别名 
	int arr[10];
	int (&arrRef)[10] = arr;
	(2) 指针数组引用, arry 相当于 ptrs 的别名,arry是一个含有10个int型指针数组的引用 
	int *ptrs[10]; 
	int *(&arry)[10] = ptrs;

 

C++中int a[10]和int* a=new int[10]]有什么区别 我们常常看见,在图论中,对一个Graph类在初始化的时候,对类的成员变量**arc(邻接矩阵,是一个二维数组,大小是顶点数*顶点数,存储内容为边的权值,而且矩阵的对角线元素均为0),有如下的初始化方法://构造函数 Graph_DG::Graph_DG(int vexnum, int edge) { //初始化顶点数和边数 this-&gt;vexnum = vexnum; this-&gt... 阅读详情

相关推荐

C++中int int& int * int**的区别、联系和用途

1、int; int是C++关键字,表示整型,其大小是32位有符号整型,表示的范围是-2,147,483,648 到2,147,483,647; 在声明和定义变量时使用,它表示的意思是所声明或所定义的变量为整型变量。 如果其用于函数参数时,其传递方向为值传递,即只能将实参的值传递给形参,而不能将形参的值传递给实参。 例如:通过这种方式去进行交换两个数是无法达到目的的。 例子1: #include&...

流楚丶格念的博客 2万+

理解int *a,int **a,int a[],int *a[]的区别

深入理解

lyh1023812的博客 7091

东方财富API隐藏技巧:这样获取分时均价线数据更稳定(避坑指南)

本文深入解析东方财富API获取股票分时数据,特别是分时均价线的实战技巧与避坑指南。针对高频调用中常见的请求失败、数据错位及IP限制等问题,提供了从接口参数深层解析、稳健请求与错误处理机制,到系统优化与数据校验的全流程解决方案,帮助开发者构建稳定可靠的数据采集系统。

rice5的博客 2526

c语言中int *a,int a和int* a什么区别?

int *a指的是定义一个指向int类型数据的指针a, int a指的是定义一个整数变量a, int* a跟int *a是一样的,只是int *a更严谨, 比如,int *a,b; 只有a是指针变量 int* a,b; 容易让人觉得a和b都是指针 #include <stdio.h> void huhuan(int a,int b) { printf("%d\n", a...

ywl470812087的博客 13万+

从零开始搭建一个高性能电流镜:手把手教你设计Wide-Swing Cascode结构

本文详细解析了Wide-Swing Cascode电流镜的设计原理与实战流程。针对低压高性能模拟电路设计的核心挑战,文章手把手指导如何从理论分析、参数计算到仿真验证,搭建一个兼具高输出阻抗和低输出电压裕度的电流镜结构,并深入探讨了偏置电路生成、性能优化及版图匹配等关键要点。

weixin_29294975的博客 623

Pluto SDR新手避坑指南:从环境配置到第一个MATLAB收发程序(附完整代码)

本文为Pluto SDR新手提供全面的避坑指南,从硬件连接到MATLAB环境配置,再到第一个信号收发程序的实现。详细介绍了驱动安装、常见问题排查以及关键参数设置,帮助用户快速上手软件定义无线电(SDR)技术,并附有完整代码示例。

weixin_33168937的博客 325

int a; int* a; int** a; int (*a)[]; int (*a)(int)

a) int a;表示一个内存空间,这个空间用来存放一个整数(int); b) int* a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数的空间,即a)中提到的空间; c) int** a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放指针的空间,并且指向的这个空间中的指针,指向一个整数。也简单的说,指向了一个b)中提到的空间; d) int (*a)[4...

wang13342322203的博客 2万+

ZED双目相机环境配置

ZED SDK 安装文件夹中有一个 Python 脚本(get_python_api.py),可以自动检测操作系统、CUDA 和 Python 版本并下载相应的预编译 Python API 包(pyzed)。安装SDK成功后,我们进入ZED SDK文件夹中的tools子文件夹,运行ZED Explorer.exe 以及 ZED Depth Viewer.exe,查看ZED相机是否能正常启用工作。在本例中,我们简单地检索ZED相机的序列号:打开 ZED相机,然后打印其序列号,然后关闭相机。

qq_53545309的博客 2136

C/C++语言中的int a; int* a; int** a; int (*a)[]; int (*a)(int),重点介绍指针数组与数组指针

这一部分往往很少被总结,但是却经常用到,在使用的时候要注意区分。 先来一个基本的来入门吧! 参考自: https://blog.youkuaiyun.com/qq_36744540/article/details/79832728 数组指针 首先,我们先介绍一下二维数组和二维数组的指针,二维数组相当于一个特殊的一维数组里面每个元素又是一个一维数组,例如:int a [ 3 ] [3],可以看成一个3行的一...

edward_zcl的博客 3万+

Android 蓝牙——概述(一)

Profiles (蓝牙应用规范),它从应用场景的角度为蓝牙技术的使用制定了不同的规范。这也是和大众日常生活接触最多的一部分。蓝牙支持很多Profiles:MAP:(MessageAccessProfile),短信访问协议,允许设备间的信息交换,短信。使用场景:智能车载中同步短信等信息。HFP:(Hands-free Profile),电话免提协议,让蓝牙设备(如蓝牙耳机/车机)可以控制电话,如接听、挂断、拒接等。

小旭的专栏 3492

Python调用CANoe(1)(启动与停止,变量和信号读写)

CANoe因为其封闭性(Vector独有),开发的时候,有很多局限性;Python 因为其开源,容易上手,功能强大,那么Python 和 CANoe结合会产生怎样的火花呢?

蚂蚁小兵 4万+

int a; int* a; int** a; int (*a)[]; int (*a)(int)指针数组,数组指针,函数指针的区别(重要)

a) int a;表示一个内存空间,这个空间用来存放一个整数(int); b) int* a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数的空间,即a)中提到的空间; c) int** a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放指针的空间,并且指向的这个空间中的指针,指向一个整数。也简单的说,指向了一个b)中提到的空间; d) int (a)[4]...

weixin_40333655的博客 1655

2、稳定性问题全景图——死机、重启、ANR、Crash、黑屏五大类

当 Crash 发生在 system_server、surfaceflinger、mediaserver 等关键系统进程中时,其后果等同于系统级故障,可能触发 Zygote 重启甚至 kernel panic。这类问题在稳定性治理中的优先级应等同于 P0。

woailuojp的博客 49

重新理解指针:用实例分清int* int** int*[] (int*)[]四者的区别

一,int * int** 这种就是最简单的指针指向一个对象。 int *直接指向一个对象;int **指向一个指针 如下: int initialInt = 10; int *initialIntPoint = &initialInt; 一个指针对象指向对象 int **initialIntPointPoint = &initialIntPoint; 这个是双指针,指向一个指针对象 cout << "对象: " &...

双鱼座boyy的博客 1万+

ardupilot 获取避障传感器数据

本节主要记录自己学ardupilot的避障代码过程,首先看下怎么注册避障传感器,然后怎么获取避障数据。

陌城烟雨 5524

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

int **p 、int (*p)() 、 int (*p)[5] 和int (**p)()

int **ptr 与 int ptr[4][4] 的区别??? *(*(ptr+1)+2);相当于ptr[1][2]; **p可以理解成*((*p+0)+0);相当于ptr[0][0];   区别在于:int **ptr定义了一个指针(具体的,二级指针),它使得编译程序使程序在运行时分配一点点内存用来存放这个指针——某个数值,它标明了内存中的某个位置; 而int ptr[4][4]定

loverz的专栏 8531

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C语言:int &x,int* x,int *x,int**的区别

int a    :一个int类型,名称叫a int* a:一个整形的指针,名称叫a int *a:一个指向整型的地址,名称叫a(一级指针,表示a所指向的地址里面存放的是一个int类型的值) int **a :二级指针,表示a所指向的地址里面存放的是一个指向int类型的指针(即a指向的地址里面存放的是一个指向int的一级指针) int & a:声明一个int引用类型,名称叫a C语言中int *a与int* a的区别: 用法上没有区别,理解上有区别。前者表示a地址指

懒羊羊的快乐小屋 5480

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++中int *p[]和int (*p)[]的区别

int *p[n] 详细讲解 int * p[2]是一个指向int型的指针数组,即:p是包含两个元素的指针数组,指针指向的是int型。 也就是说p[0],p[1]是各指向一个一维数组的指针,指针指向的是int型。 试例: #include <iostream> using namespace std; int main() { int arr[2] = { 1,2 }; int arr1[3] = { 10,2,3 }; int* p[2]; p[0] = arr; p[1] = a

Awesomewan的博客 4955

int *a[n]和int (*b)[n]的区别(易混淆)

int *a[n](由返回整型数据的指针所组成的数组) 1.指针数组;每n个元素全为指针的数组. 2.a是一个指针数组,每一个指向一个int型 方便理解: 是指针数组, 有 n 个成员,每个成员都是一个指针,共有n个指针 int (*b)[n](指向由整型数据组成的数组的指针) 1.数组指针;指针类型是 int [n]类型的数组.指向n个元素组成的数组的一个指针。 2.b是一个指针,指

用来学习的地方 1万+

c语言int* a,关于int *a; int &a; int & *a; int * &a

a) int a;表示一个内存空间,这个空间用来存放一个整数(int);b) int* a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数的空间,即a)中提到的空间;c) int**a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放指针的空间,并且指向的这个空间中的指针,指向一个整数。也简单的说,指向了一个b)中提到的空间;d) int(*a)[10];表示...

weixin_32987379的博客 4252

c语言 *p[N], (*P)[N],及**p的区别

先明白什么是指针变量,和指针。指针其实就是存储单位的地址,指针变量是一个变量,用来存放指针(即地址); int *p[N]表示指针数组,也就是说定义了N个int型的指针变量。 其中p[0] p[1] p[2] ...... p[N-1] 为指针变量,每个指针变量存放任意int型指针。 p是一个二重指针,p为是指针变量p[0]的指针(就是p[0]的地址)。 int (*p)[N]表示定义p为一个指针变量,它指向包含N个整形元素的一维数组。 其中(*P)[0] (...

Hushi1706IT的博客 3138

int a; int* a; int** a; int (*a)[]; int (*a)(int)

a) int a;表示一个内存空间,这个空间用来存放一个整数(int);b) int* a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放整数的空间,即a)中提到的空间;c) int** a;表示一个内存空间,这个空间用来存放一个指针,这个指针指向一个存放指针的空间,并且指向的这个空间中的指针,指向一个整数。也简单的说,指向了一个b)中提到的空间;d) int (*a)[4]...

TwcatL 591

int *a[10] 和 int (*a)[10] 的区别

C语言经典面试题目:用变量a给出下面定义1:一个整型a;       //int a ;2:一个指向整型数的指针;    //  int *a;3:一个指向指针的指针,它指向的指针是指向一个整型数;   //  int **a ;4:一个有10个整型数的数组 ;     //  int a[10] ;5:一个有10个指针的数组,该指针是指向一个整型数的 ;      // int *a[10] ;...

leikun153的博客 6381
上一篇: opencv学习 边缘检测 --拉普拉斯算子(Laplace)
下一篇: 顶层const和非顶层const和函数重载的问题
obsorb_knowledge
博客等级 码龄9年 38粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值