c++ day4数组和指针的关系, 指针运算,结构体

数组和指针

指针变量储存的是变量的内存地址,
数组的地址就是数组所占据内存空间的第一块数据的地址,而数组的值是由数组所有元素的值构成,打印数组的时候会输出数组的第一个数据的指针, 可以说和指针有点联系, 但 数组 != 指针,

    int a[5] = {10};

    int *p = a;
    std::cout << sizeof(a) << "        " <<  sizeof(p) << std::endl;
    std::cout << typeid(p).name() << "        " <<  typeid(a).name() << std::endl;
    
//输出
// 20        8
// Pi        A5_i

可以通过typeid 和 大小可以看到,指针就是指针,数组就是数组

指针运算

指针也是可以进行位移运算的,例如,,有一个指针变量指向另一个数组变量中的的第一个元素的内存地址, 这样就可以通过指针的位移运算获取该数组的其他位置的元素了, 如:

    int a []{10, 20, 30};
    int *p = a;    // 获取到的是数组的第一个元素的内存地址
    std::cout << "数组a的第一个元素是 " << *(p+0) << std::endl;
    std::cout << "数组a的第二个元素是 " << *(p+1) << std::endl;
    std::cout << "数组a的第三个元素是 " << *(p+2) << std::endl;

// 输出
// 数组a的第一个元素是 10 偏移后的指针地址是: 0x61fd60
// 数组a的第二个元素是 20 偏移后的指针地址是: 0x61fd64
// 数组a的第三个元素是 30 偏移后的指针地址是: 0x61fd68

可以看到,指针也是可以进行运算的,通过指针变量加1可以获取数组的下一位指针,然后解引用获取到指针的内容, 注意, 指针加1是指针类型的内存地址偏移, 如, 当前指针是int 类型的,所以它加1就会偏移 4 个字节, 得到新的内存地址, 而不少单纯的数字加一

    double b [] {10, 20, 30};
    double *p1 = b;
    std::cout << p1 << std::endl;
    std::cout << "数组b的第一个元素是 " << *(p1+0) << " 偏移后的指针地址是: " << p1 + 0<< std::endl;
    std::cout << "数组b的第二个元素是 " << *(p1+1) << " 偏移后的指针地址是: " << p1 + 1<< std::endl;
    std::cout << "数组b的第三个元素是 " << *(p1+2) << " 偏移后的指针地址是: " << p1 + 2<< std::endl;
// 输出
// 数组b的第一个元素是 10 偏移后的指针地址是: 0x61fd40
// 数组b的第二个元素是 20 偏移后的指针地址是: 0x61fd48
// 数组b的第三个元素是 30 偏移后的指针地址是: 0x61fd50

可以看到,指针运算是以类型的大小来进行运算的, int 4 个字节, double 8 个字节
指针可以进行++ – 操作

结构体

在架构体中可以存储不同类型的数据,比数组,vector 这种只能储存相同类型的容器灵活多了,结构体通过 static 来进行 声明,

struct stu{
    int age;
    string name;
};

在 stu 结构体中可以存储不同类型的数据, 当获取数据额时候通过 结构体.属性 就可以获取到结构体中储存的数据了,

struct stu{
    int age;
    string name;
};
stu stus;
stus.name = "laoluo";
stus.age = 20;
std:: cout << stus.age << std::endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值