java基础改学C++(五)数组(1)

#include <iostream>

using namespace std;

 

int main(){

 

//1.1 声明一个数组  

// 类型 int 加名字 a 加 [元素数],如果不写元素数,就必须在后面写内容 = {1,2,3,4}; 系统根据内容判断数组大小,此后大小就固定。

    int b[3] ;

    int c[] = {1,2,3,4};

   

    int a[10] = {1,2,3,4};

    // 赋了部分初值的前提下,其余没赋值的都为0。声明了 static 的数组默认值都 0。

    

注意:在比较老的C++版本里,上面那种方式声明的数组,大小不能是变量,现在基本上都支持用变量。

// 重点概念:数组在内存中顺序存放

 

// 二维数组,元素在内存中仍线性顺序存放,第一个元素内存中位置最低,维数为常量。

    int d[3][4] = {{1,2},{3}};

    int e[][4] = {{2,45},{42,5,2,3}}; // 省略了一维的大小

// 这里一维可省大小,二维不可以。否则系统推断不出选哪个做第二维的长度

    

// 好了,其余的和 java 差不多了,但是有一点,关于数组长度 java 用 length 就解决了,C/C++ 里怎么解决呢?

// 使用数组时,经常涉及到作为参数传递,但一般是参数里同时传递数组大小,因为数组做参数会变为指针。这里肯定现在无法理解,只需记住一点,数组大小,通过参数传递,不要通过计算的方式获取。虽然下面这种计算方法对于数组类型在某些情况下是可以用的。总之记住,数组大小是手动用一个值存储、传递的。以后学到类,vector 类可以获取元素数目。

    int len = sizeof(a)/sizeof(int); 

    // 解释: a 数组在内存中的总大小,除以一个 int 类型的大小(都是byte为单位),就是数组长度了。不要用这个方法。

 

// 1.3 数组与指针

下文是对指针的预防针,后面有专门的文章说,大致看看即可。

 

// C/C++中,数组名,就是,数组在内存中存放的首地址!!!!是地址!!!!地址的另一个名字,是指针!!!!

通过这个性质,让指针=数组名,指针+1,就是下一个元素的指针,即下一个元素的地址。

// 下面有个 demo,主要为说明一个问题,数组作为参数传递时,数组名其实是一个地址,地址本质是一个数,数的长度和 long 类型一样长,这个数,就是在内存中的地址。

一个demo:第一张图:(后面有第二张,一起的)

(这里 demo 纯粹为了演示数组与指针,没有在参数里单独传递数组长度)

 

第二张,最终结果

 

函数里,a 作为一个数组,一个指针,一个地址数,其实和 b 的值相同,把他们当作一个数。

 

一般函数声明都是这样的:

    void sum(int array[], int lenth); // 长度作为一个参数

或者:

    void sum(int *array, int lenth); // 两个声明是等价的,变相说明了:

数组作为参数传递后,本身就不是“数组”了,是一个指针,所以前面提过的计算数组的方法会出问题。

 

 指针有关的,后文会详述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值