c++基础学习Num04

目录

 基于for循环

一维数组

二维数组理解

c语言的null和c++的null


 基于for循环


for(ELEMTYPE val:array){
    
}

ELEMTYPE:是范围变量的类型。通常使用auto自动转换范围变量类型

val:范围变量的名称。通过迭代依次接收数组中的元素值

array:容器,注意这里的array必须是一个容器空间。

int main() {
    int ar[] = { 1,2,3,4};
    for (int& x : ar) {
        cout << x << endl;
    }
    for (int x : ar) {
        cout << x << endl;
    }
}//打印结果都是1,2,3,4

注意:一个是普通变量:通过迭代将ar[i]的值取出来赋值给x,然后输出

另外一个是引用:x是ar的别名,如果x+10那么ar数组也会随之发生改变。

一维数组

int a0,a1,a2,a3;
int*p0,*p1,*p2,*p3;
int**s;
p0=&a0;
p1=&a1;
p2=&a2;
p3=&a3;
s=&p0;
sizeof(s);
s+1;//4 int**
*s+1;//4 int*
**s+1;//4 int

s+1---->s是一个二级指针,s+1说明指针指向p1这个一级指针,偏移量是指针类型四字节

*s+1---> *s解引用变成一级指针,一级指针+1代表p0这个一级指针刚开始存储a0这个整型变量的地址,+1后就是a1这个变量的地址,偏移量是int类型,四字节

**s+1---> * *s解引用两次变成a0,+1操作即给a0自身加一

int ar0[4],ar1[4],ar2[4];
int(*p)[4]=&ar0;
p+1--->4*4=16个字节

p:&ar0 p+1--->4*4=16

*p:&ar0[0] *p+1--->4

数组首元素的地址和数组的地址都是从ar0[0]处开始 值是相等的但是意义不相同,+1偏移量不同

通过p指针修改ar1[2]的值

/* (*(p+1)+2) 就行==>p [1] [2];

p+1-->指针由ar0指向ar1 ,*(p+1)指针指向数组ar1中的元素, *(p+1)+2指针就指向ar1[2],通过解引用对值进行修改

 

二维数组理解

二维数组由多个一维数组构成

int br[3] [4]={1,2,3,4,5,6,7,8,9,10,11,12};

int(*p)[3] [4]=&br;

int (*s)[4]=br;--->一维数组的内容了

#include<iostream>
using namespace std;
int main(){
    int ar[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    for(auto x:ar){//ar[0]
        cout<<x<<endl;
    }
}

如果按照上述方法打印二维数组将会得到三个一维数组的地址,因为基于范围的for是将ar[i]提取出来,依次迭代,由于上述二维数组是一个三行4列即由三个一维数组构成,所以打印的三个一维数组的地址

正确方法:

#include<iostream>
using namespace std;
int main(){
    int ar[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    for(auto &x:ar){//ar[0]依次迭代
        for(auto val:x){//ar[0][0]依次迭代
            cout<<x<<endl;
        }
    }
}

c语言的null和c++的null

 #ifdef __cplusplus
        #define NULL 0
    #else
        #define NULL ((void *)0)

在c++中NULL的值是0,所以无法判断空指针是指针还是整型0

所以c++使用nullptr这个关键字来代表指针空值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值