1.指针*
使用常规变量时,值是指定的量,而地址是派生量。
int x = 1;
使用指针时,将地址视为指定的量,而将值视为派生量。
int* p_x;
创建指针时应注意:
int* p1,p2; //创建的是一个指向int型的指针p1 和 一个int类型的变量p2
int* p1,*p2; //创建的是两个指向int型的指针p1和p2
在对指针使用解除运算符*之前,一定要给指针初始化为一个确定的、适当的地址。
否则直接使用:
int* point;
*point = 123456; // point没有被初始化,它可能有任何值。
2.new的使用
typeName* pointerName = new typeName;
如:int* p1 = new int;
通常所说的new一个对象,即是new 根据数据类型typeName来确定需要动态分配多少的内存,并找到这块内存的地址,将地址赋值给指针pointerName,此时指针pointerName指向一个typeName数据类型的数据对象(相当于变量),该数据对象即为数据项分配的内存块。
new运算符的作用:在运行阶段分配未命名的内存以存储值
3.数组的地址
short array[10];
cout << array << endl;
cout << array + 1 << endl;
cout << &array <<endl;
cout << &array + 1 <<endl;

Array被解释为该数组的第一个元素的地址
&array 则为该数组的整个地址
当对这两个输出显示时,数值上一样,但两者的地址大小并不同,前者只占2个字节,后者占20个字节。
4.在cout和多数C++表达式中,char数组名、char指针以及用引号括起的字符串常量都被解释为字符串第一个字符的地址。
5.C++中分配内存的方法
(1)自动存储:函数内部定义的局部变量使用自动存储空间,其作用范围仅在该函数这个代码块。当被创建时,该变量被存储到一个栈中;代码块被执行完毕后,释放变量,且遵循先进后出的顺序。
(2)静态存储:①全局变量②关键字static声明的变量,将存在于程序的整个生命周期
(3)动态存储:new & delete,可以在一个函数中(代码块)声明new一个变量的同时,不随该函数的结束而被释放其内存,可以主动的去控制在另一个函数中再去delete释放它,大大增加了内存使用的灵活性。
(4)线程存储
本文介绍了C++中的指针使用,强调了指针初始化的重要性。同时讲解了new运算符用于动态内存分配的过程,以及数组地址和数组名的区别。还提到了内存管理的四种方式:自动存储、静态存储、动态存储和线程存储,阐述了它们的特点和应用场景。
16万+

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



