复杂=简单+简单
介绍三种数据类型:数组,指针,数据结构。
-
数组 数组是许多程序设计语言的重要组成部分,尤其在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;
注意:对一个无类型指针进行解引用前,必须先把它转换为一种适当的数据类型。
这篇博客探讨了C++中的两种复杂数据类型——数组和指针。数组提供了一种在同一变量名下存储多种类型值的方式,但类型必须统一。指针则是存储内存地址的特殊变量,用于直接访问和修改内存中的数据。文章详细介绍了内存对齐、寻址、取址操作符以及指针声明和解引用的概念,强调了指针安全使用的注意事项。

被折叠的 条评论
为什么被折叠?



