指针笔记(指针数组和指向数组的指针,数组中a和a的区别等)

news2024/11/15 15:45:37

指针数组和指向数组的指针

int *p[4]和int (*p)[4]有何区别?
前者是一个指针数组,数组大小为4,每一个元素都是一个指向int的指针
后者是指向int[4]类型数组的指针
在这里插入图片描述
以上代码若运行会报如下错误
在这里插入图片描述
main函数中定义的a数组本质是一个指向int[2]的指针,而函数形参则是一个指针数组,即形参的a是一个二维指针,所以会报错类型不匹配
若将形参改为int (*a)[2]则编译通过

数组中a和&a的区别

假如a是一个一维数组,输出a和&a发现结果相同,都是一维数组首元素的地址,但两者虽然值相同,却是不同的
在这里插入图片描述
这段代码是没问题的,但若将第二行的&a改为a,则会报错
在这里插入图片描述
即编译器认为a是int类型的,而&a则是int ()[4]类型的,用大白话讲就是&a编译器可以认出a是一个数组,a则不行

#include "stdio.h"
int main()
{
 int a[5] = { 1,2,3,4,5 };
 int *ptr = (int *)(&a + 1);
 printf("%d,%d", *(a + 1), *(ptr - 1));
 /*getchar是用VS编写方便查看输出*/
 getchar();
 return 0;
}

请思考一下上面的输出结果,如果你非常自信了,可以不用往下看
这个题目主要考察&a 和 a

  • a 在这里代表是的数组首元素的地址即 a[0]的首地址,其值为 0x005efda0。
  • &a 代表的是数组的首地址,其值为 0x005efda0。
  • a+1 的值是 0x005efda0+1*sizeof(int),等于 0x005efda4。
  • &a+1 的值是(0x005efda0 +(sizeof(a)= 5*sizeof(int))= 0x005efdb4 {0xcccccccc, 0xcb626a90, 0x005efdd0, 0x0029200e, 0x00000001}

二级指针

指向指针的指针

//一些常用的头文件
#include<stdio.h>
#include<iostream>
using namespace std;

/*
通过引用直接去修改数组里的元素
小技巧:函数写在主函数(main)前面,就不用写函数声明了
*/
void SetArray(int row,int col,int** &Array){//&是引用符号,得到的是指针地址
//二维指针需要通过一维指针去指向数组
	Array = new int*[row]; //开辟行空间
	for(int i = 0;i < row;i++){
		Array[i] = new int[col]; //开辟列空间
		for(int j = 0;j < col;j++){
			Array[i][j]  = 0;//初始化,也可以将其他数组或是值存进去
		}
	}
}
//打印数组里的内容
void PrintArray(int** Array,int row,int col){
	for(int i = 0;i < row;i++){
		for(int j = 0;j < col;j++){
			cout << Array[i][j] << " ";
		}
		cout << endl;
	}
}
//内存释放:开辟的数组空间用完必须要手动释放,不然会爆内存
void DeleteArray(int** Array,int row){
for(int i = 0;i < row;i++){
		delete[] Array[i];
	}
	delete Array;
}
int main(){
	int** Array = NULL;
	int row = col = 3;
	SetArray(row,col,Array);
	PrintArray( Array,row,col);
	DeleteArray(Array,row);
	return 0;
}


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

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

相关文章

内网渗透(三十八)之横向移动篇-pass the key 密钥传递攻击(PTK)横向攻击

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

从0到1一步一步玩转openEuler--18 openEuler 管理服务-简介

文章目录18 管理服务简介18.1 概念介绍18 管理服务简介 systemd是在Linux下&#xff0c;与SysV和LSB初始化脚本兼容的系统和服务管理器。systemd使用socket和D-Bus来开启服务&#xff0c;提供基于守护进程的按需启动策略&#xff0c;支持快照和系统状态恢复&#xff0c;维护挂…

java基础学习 day41(继承中成员变量和成员方法的访问特点,方法的重写)

继承中&#xff0c;成员变量的访问特点 a. name前什么都不加&#xff0c;name变量的访问采用就近原则&#xff0c;先在局部变量中查找&#xff0c;若没找到&#xff0c;继续在本类的成员变量中查找&#xff0c;若没找到&#xff0c;继续在直接父类的成员变量中查找&#xff0c…

Mel Frequency Cepstral Coefficients (MFCCs)

wiki里说 在声音处理中&#xff0c;梅尔频率倒谱( MFC ) 是声音的短期功率谱的表示&#xff0c;基于非线性梅尔频率标度上的对数功率谱的线性余弦变换。 倒谱和MFC 之间的区别在于&#xff0c;在 MFC 中&#xff0c;频带在梅尔尺度上等距分布&#xff0c;这比正常频谱中使用的线…

Windows10 安装ElasticStack8.6.1

一、安装ElasticSearch8.6.1 1.官网下载ElasticSearch8.6.1压缩包后解压 2.安装为服务 elasticsearch-service.bat install 3.运行 elasticsearch-service.bat start 4.通过浏览器访问 http://localhost:9200/ 提示需要登录&#xff0c;但不知密码是啥。 5.重置密码 ela…

操作系统(day12)-- 基本分段存储,段页式存储

基本分段存储管理方式 不会产生内部碎片&#xff0c;会产生外部碎片 分段 按照程序自身的逻辑关系划分为 若干个段&#xff0c;每个段都有一个段名&#xff0c;每段从0开始编址 分段存储管理方式中一个段表项由段号&#xff08;隐含&#xff09;、段长、基地址 分段的段表项固…

Python基础2

1. python函数定义 函数定义语法&#xff1a; def 函数名&#xff08;传入参数&#xff09;&#xff1a; 函数体 return 返回值 —————————————— 参数如果不需要&#xff0c;可以省略返回值如果不需要&#xff0c;可以省略函数必须先定义在使用 注意&#xff…

UIE微调:autoML平台实践(一)

参考&#xff1a;uie模型微调个人总结 github&#xff1a;https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/uie 1、显存问题 之前是在实验室的服务器上跑&#xff08;2080ti&#xff0c;12G显存&#xff09;&#xff0c;频频出现以下报错&#xff1a; 原…

python 刷题时常见的函数

collections.OrderedDict 1. move_to_end() move_to_end() 函数可以将指定的键值对移动到最前面或者最后面&#xff0c;即最左边或最右边 。 2. popitem() popitem()可以完成元素的删除操作&#xff0c;有一个可选参数last&#xff08;默认为True&#xff09;&#xff0c;…

微软?还是Linux?

导读本周&#xff0c;微软宣布它成为了 Linux 基金会的白金成员&#xff0c;这距其前 CEO 巴尔默将 Linux 称之为“癌症”才 15 年。虽然此举对微软来说意义重大&#xff0c;但是并不是开源界的每个人都认为这对于 Linux 来说是好的变化&#xff0c;特别是这家位于雷德蒙的软件…

kafka-3-kafka应用的核心要点和内外网访问

kafka实战教程(python操作kafka)&#xff0c;kafka配置文件详解 Kafka内外网访问的设置 1 kafka简介 根据官网的介绍&#xff0c;ApacheKafka是一个分布式流媒体平台&#xff0c;它主要有3种功能&#xff1a; (1)发布和订阅消息流&#xff0c;这个功能类似于消息队列&#x…

宁波大学2023年MBA招生考试初试成绩查询的通知

根据往年的情况&#xff0c;2023宁波大学MBA考试初试成绩可能将于2月21日公布&#xff0c;最早于20号出来&#xff0c;为了广大考生可以及时查询到自己的分数&#xff0c;杭州达立易考教育为大家汇总了信息。 宁波大学2023年全国硕士研究生招生考试初试成绩将于2月21日公…

Java Type类

文章目录Type简介Type分类1. 原始类型(Class)2. 参数化类型(ParameterizedType)3. 类型变量(TypeVariable)4. 通配符类型(WildcardType)5. 泛型数组类型(GenericArrayType)Type简介 Type是Java编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型…

Java数据结构-栈、队列常用类(Stack、ArrayDeque、LinkedLList)

数据结构的三要素包括&#xff1a;逻辑结构、存储结构、数据的运算。逻辑结构描述的是数据之间的逻辑关系&#xff0c;分为线性结构&#xff08;线性表&#xff08;数组、链表&#xff09;、栈、队列&#xff09;和非线性结构&#xff08;图、树、集合&#xff09;。物理结构也…

服务器是干什么用的?

首先&#xff0c;什么是服务器&#xff1f;服务器是提供计算服务器和网络服务的设备。服务器和计算机由CPU、硬盘、内存、系统总线等组成。比如我们访问一个网站&#xff0c;点击这个网站会发出访问请求&#xff0c;服务器会响应服务请求&#xff0c;进行相应的处理&#xff0c…

在windows中使用tomcat搭建Jenkins

1、 准备环境&#xff1a;JDK JDK官网下载&#xff1a;https://download.oracle.com/java/19/latest/jdk-19_windows-x64_bin.msi 2、 tomcat包 tocat官网下载&#xff1a;https://tomcat.apache.org/download-90.cgi 3、 Jenkins.war包 Jenkins官网下载&#xff1a;https://mi…

GEE学习笔记 七十六:【GEE之Python版教程十】字典

python中万物皆对象&#xff0c;字典在其他的语言中也有称之为对象&#xff0c;无论怎么称呼它其实就是 {key:value} 这种格式。 依然是运行代码前先注册GEE import ee ee.Initialize() 1、字典的API 首先看一下GEE的python版API&#xff08;Welcome to GEE-Python-API’s d…

曾经的月薪3K,现在的月薪25K,我的测试经验值得你的借鉴

成功不能复制&#xff0c;但经验却可以借鉴&#xff01;从曾经的月薪3K&#xff0c;到现在的月薪25K&#xff0c;我觉得我的涨薪之路的的确确可以给很多人一些参考。授人以鱼不如授人以渔&#xff0c;所以&#xff0c;今天我也想把我的经验分享给大家&#xff0c;希望可以帮助一…

Unity New Input System

安装 Input System是新的输入系统&#xff0c;用来取代旧的Input Manager&#xff0c;方便接收不同的输入设备 在Package Manager里安装 安装后可以选择只使用新的Input System&#xff0c;或选Both两者都使用&#xff0c;考虑很多插件还在使用旧的Input Manager&#xff0c…

nacos discovery和config

微服务和nacos版本都在2.x及之后。1、discovery用于服务注册&#xff0c;将想要注册的服务注册到nacos中&#xff0c;被naocs发现。pom引入的依赖是&#xff1a;yml配置文件中&#xff1a;2、config用于获取nacos配置管理->配置列表下配置文件中的内容pom引入的依赖是&#…