我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C++数组和指针的区别与联系

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C++数组和指针的区别与联系

前言:

一直以来,有很多地方在说到数组和指针时都会说数据就是指针,这种观点也被越来越多的人接受。本文将主要介绍数组和指针。是不是一样的大家自己理解。如此而已……

1 数组和指针的概念

数组:具有固定大小和连续内存空间的相同数据集合。里面的存储的元素具有地址连续性和数据类型相同的特点。
指针:是指存放内存地址的变量。从0开始。32位系统可访问内存4G,目前64位系统可寻址内存空间为128G。(可能会更大。这个需要硬件资源的支撑。不抬杠)

2 数组和指针的操作

2.1 赋值

数组:对数组元素进行逐个赋值。
指针:相同类型指针可以直接进行赋值。

2.2 存储

数组:从数组的定义就可以知道。数组的内存是连续的。可以在栈上进行定义也可以通过malloc或者new等在堆上进行定义。
指针:本身是一个变量,指向其对应的类型的变量。指向的地址也是变量的地址,然后在通过该地址获取它指向变量的值。

2.3 大小

可以通过sizeof宏进行获得。

数组:数组的大小通过sizeof(数组名)/sizeof(类型名)获取。
指针:在32位的操作系统中为4,在64位操作系统中是8。

2.4 初始化

数组的初始化方式为:

//初始化一个双精度型数组
double balance[5] = {1.0, 2.0, 3.0, 4.0, 5.0};
//初始化一个二维数组
int a[5][3]={ {80,75,92}, {61,65,71}, {59,63,70}, {85,87,90}, {76,77,85} };

指针的初始化方式为:

//定义一个指向整型变量的指针
int *p=new int(0) ;
//定义一个指向数组的指针
int *p=new int[n];
//定义一个指针的指针
int **pp=new (int*)[2]; 
pp[0]=new int[6];
pp[1]= new int[10];

指针数组和数组指针的定义请移步以下文章:C语言简明知识系列十一(下):指针

3 数组和指针的传参

C/C++的传参方式可以分为传值型和传址型,传值实际上对将参数进行拷贝,在程序运行中对参数做的任何修改都是在拷贝后的变量产生的,函数退出后不会影响传入参数,传址型恰恰相反,会对原有参数进行修改。数组和指针当做参数传入时基本为引用方式,具体要看代码作者是如何使用。

3.1 数组的传参

数组传参分为一维数组和多维数组。当做参数传入时会退化成指针。

一维数组:

void Fun(int a[])
{
    ;
}
int main()
{
   int testArray[]={1,2,3};
   Fun(testArray);
   return 0;
}

如上,当然也可以将Fun函数的参数形式定义为如下形式:

void Fun(int *a)
{
    ;
}

二维数组:

void Fun(int (*a)[5])
{
    ;
}
int main()
{
   int testArray[2][5]={
       {1,2,3,4,5},
       {4,5,6,7,8}
   };
   Fun(testArray);
   return 0;
}

3.2 指针的传参

如果函数的参数是一个指针。那么可以给函数传递的参数为三种,分别是:指针变量、变量的地址、一个数组名。在这里数组名实际上就是指向数组的首地址。
指针:

void Fun_p(int *p){};
int main()
{
   int testArray[]={1,2,3};
   int *pIntArray = testArray;
   int iValue = 10;
   //传递数组名
   Fun_p(testArray);
   //传递指针变量
   Fun_p(pIntArray);
   //变量地址
   Fun_p(&iValue);
   return 0;
}

指针的指针:
 

void Fun(int **p)
{
    ;
}

int main()
{
   int testArray[5]={1,2,3,4,5};
   int *pIntArray = testArray;
   int iValue = 10;
   int *tmpP = &iValue;
   //传递指针变量
   Fun(&pIntArray);
   //变量地址
   Fun(&tmpP);
   return 0;
}

4 总结

除了上面介绍外,指针还有函数指针,自然就会有指向函数的指针数组以及指向函数指针的指针。在实际使用时,这些类型的引入在指引我们灵活编程的同时也给我们带来了很大的风险,一旦出错,排除问题和解决问题的复杂度也将增加。在进行指针编程的时候需要谨慎使用。
函数和数组既有相同点,也有不各自独特之处。细思之,一些所谓函数既指针的说法需要谨慎判断。切勿人云亦云!

到此这篇关于C++数组和指针的区别与联系的文章就介绍到这了,更多相关C++数组和指针的区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C++数组和指针的区别与联系

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何分析C++数组和指针的区别与联系

这期内容当中小编将会给大家带来有关如何分析C++数组和指针的区别与联系,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言:一直以来,有很多地方在说到数组和指针时都会说数据就是指针,这种观点也被越来越多的人
2023-06-26

C++ 内联函数与函数指针的区别

内联函数直接展开而不调用,而函数指针存储指向函数地址的变量,允许间接调用函数。C++ 内联函数和函数指针的区别什么是内联函数?内联函数是编译器在编译时直接展开的函数。这意味着内联函数的调用不会导致实际的函数调用,而是直接将函数代码插入到
C++ 内联函数与函数指针的区别
2024-04-16

C语言指针数组和数组指针的区别有哪些

这篇“C语言指针数组和数组指针的区别有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言指针数组和数组指针的区别有哪些
2023-07-04

C语言数组指针和指针数组有什么区别

这篇文章主要讲解了“C语言数组指针和指针数组有什么区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言数组指针和指针数组有什么区别”吧!区别:指针数组本身是一个数组,数组的元素都是指针,
2023-06-20

c语言指针数组和数组指针有什么区别

C语言中,指针数组和数组指针是两种不同的概念。指针数组(Pointer Array):指针数组是一个数组,其中的元素都是指针类型。它可以被认为是一个存储了指针的数组,每个指针可以指向不同的数据类型或地址。指针数组的声明方式为:`dataTy
2023-10-27

弄清Go语言和C语言指针的区别与联系

Go语言和C语言是两种流行的编程语言,它们在许多方面都有相似之处,但在指针的概念和用法上有一些明显的区别。本文将深入探讨Go语言和C语言指针的区别与联系,并通过具体的代码示例进行说明。首先,我们来看看C语言中指针的基本概念和用法。在C语言
弄清Go语言和C语言指针的区别与联系
2024-03-07

C++指针和数组:字符和字符串、字符数组的关联和区别

字符串是一种重要的数据类型,但是c语言并没有显示的字符串数据类型,因为字符串以字符串常量的形式出现或者存储于字符数组中。在C++标准模板库(STL)中提供了string类,实现了对字符串的封装。
2022-12-23

C/C++数组名与指针的区别是什么

这篇文章主要讲解了“C/C++数组名与指针的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C/C++数组名与指针的区别是什么”吧!指针是C/C++语言的特色,而数组名与指针有太多的
2023-06-17

指针数组和数组指针的区别是什么

区别:对指针数组来说,首先它是一个数组,数组的元素都是指针,也就是说该数组存储的是指针,数组占多少个字节由数组本身决定;而对数组指针来说,首先它是一个指针,它指向一个数组,也就是说它是指向数组的指针,在 32 位系统下永远占 4 字节,至于它指向的数组占多少字节,这个不能够确定,要看具体情况。
2023-05-14

php数组指针和指针数组有什么区别

本篇内容主要讲解“php数组指针和指针数组有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php数组指针和指针数组有什么区别”吧!区别1、指针数组本身是一个数组,数组的元素都是指针,即数
2023-06-20

c++中引用与指针的区别

引用和指针都是用于处理内存地址的机制。引用在编译时绑定,始终指向同一内存地址,与对象共享相同内存空间。指针在运行时绑定,可以指向不同的内存地址,不与对象共享相同内存空间。引用用于不修改对象的情况下操作对象,而指针用于处理动态分配的内存或修改
c++中引用与指针的区别
2024-05-06

数组指针和数组引用有什么区别?

数组指针和数组引用之间有以下区别:解引用需要:数组指针需要解引用,而数组引用不需要。指针算术:数组指针支持指针算术,而数组引用不支持。地址:数组指针存储数组首元素地址,而数组引用不是地址。常量 kval:数组指针可以指向 const kva
数组指针和数组引用有什么区别?
2024-05-24

指针与数组的关联3 --声明

当我们在调用函数时,传递数组,就是把数组首元素的地址传递给函数,本质也就是给函数传递了一个指针变量。这时候我们会想那么数组是不是跟指针是一样的。为了验证,我们可以给一个项目里创建一个新的源文件,里面创建一个指针变量和是个数组,然后在另一个文
2023-01-31

【JAVA】JAVA与C++的区别与联系

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言两方介绍C++JAVA 不同==|Java不支持指针、模板、指针重载、联合等|====|支持析构函数|====|条件编译和包含|
2023-08-16

C++中指针常量与常量指针的区别是什么

在C++中,指针常量和常量指针是不同的概念。1. 指针常量(Pointer to constant):指针本身是一个常量,即指针的值不能被修改,但是它所指向的值可以被修改。声明一个指针常量时,要在指针类型前加上const关键字。示例:```
2023-08-16

C++函数指针与C#委托之间有何联系

C++函数指针与C#委托之间有何联系,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C#中有一种应用方法叫做委托。其应用方式及实现功能和我们以前为大家介绍的C++
2023-06-17

c语言和c++的区别和联系

c语言和c++是计算机科学领域应用广泛的编程语言。虽然它们有着相似的基础,但它们在语言类型、语法功能和内存管理方面存在着显著差异。c语言是一种面向过程的语言,而c++是一种面向对象的语言。c++扩展了c语言的类型系统,引入了引用、函数重载和
c语言和c++的区别和联系
2024-03-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录