复杂的数据类型(数组,指针)

这篇博客探讨了C++中的两种复杂数据类型——数组和指针。数组提供了一种在同一变量名下存储多种类型值的方式,但类型必须统一。指针则是存储内存地址的特殊变量,用于直接访问和修改内存中的数据。文章详细介绍了内存对齐、寻址、取址操作符以及指针声明和解引用的概念,强调了指针安全使用的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

复杂=简单+简单

介绍三种数据类型:数组,指针,数据结构。

  • 数组 数组是许多程序设计语言的重要组成部分,尤其在c程序中经常用到它们。
    数组的优点在于,一个数组可以把多个不同类型的值存储在同一个变量名下。 数组仍需要被声明为某一种特定的类型:int,float,char
    type name[x]; 注意:我们不会把不同数据类型的数据混杂保存在同一个数组中,(不同物种不可杂交)。

  • 指针
    c语言和c++里最重要的数据类型之一:指针 内存:程序在硬盘上以文件的形式存在,但运行却是在计算机的内存里发生的。

    int a=-12; char b=M; float c=3.14; 这些语句声明的变量在内存中的存放情况
    在这里插入图片描述

  • 对齐:在c++里,变量类型是根据它们的自然边界对齐的,对齐在计算机底层世界处处皆是,内存对齐,文件对齐。(程序在编译链接后会被分割成一个一个的区块,而区块在文件和内存中要按照一定规律来对齐)
    一般32位系统内存对齐值是:1000H == 4KB(windows中一页就是4KB) 一般64位系统内存对齐值是:2000H==8KB
    文件的对齐值是:200H(在硬盘中)

  • 寻址:对于变量可以用两种办法来对它进行索引。一种是通过变量名,一种是通过地址。 取址操作符"&",作用就是获得变量的地址。
    实例int var=123;
    std::cout<<“Address is:”<<&var;
    变量的地址在程序执行期间不会发生改变, 同一个程序不同时间加载到内存中,同一个变量的地址是会改变的。(windows加载器原理和系统对程序的欺骗)

  • 地址是计算机内存中的某个位置,而指针是专门用来存放地址的特殊类型变量。 一般用下面形式来声明指针变量:type *pointerName;
    注意:int *p1,p2,p3;//只有p1是指针变量 指针变量前面的类型是用来说明指针指向的类型,务必匹配使用。

  • 利用指针改变值
    int a=456;
    char b=‘C’;
    int *apointer=&a;
    Char *bpointer=&b;
    这会让程序保留4个内存块,两个为变量保留,两个为指针保留。变量a和变量b里边存放的是变量的值;两个指针变量存放着指针的值,这些值是其他变量的地址。如下图
    在这里插入图片描述

  • 当我们知道了某个变量在内存中的地址(通过指针)·就可以利用指针访问位于该地址的数据。这需要对指针进行“解引用(Deference)“处理即在指针名的前面加上一个星号()。
    std::cout << apointer;
    这里我们来理解一下:把整数变量a的地址存储在 pointer指针里之后,
    pointer和变量a将代表同一个值。
    因此:
    pointer=123;将会 在这里插入图片描述

    1.一定要牢记的事实:指针所保存的是内存中的个地址。它并不保存指向的数据的值本身。因此,务必确保指针对应一个已经存在的变量或者一块已经分配了的内存

    2.星号有两种用途
    第一种是用于创建指针 int *myPointer =&myint;
    第二种是对指针进行解引用 *my Pointer =3998;

    C++允许指针群P,就是多个指针有同样的值 int*p1 =&myint; int *p2=&myint;
    C++支持无类型(void)指针,就是没有被声明为某种特定类型的指针
    例如 void *vpointer;
    注意:对一个无类型指针进行解引用前,必须先把它转换为一种适当的数据类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值