指针(二)

指针基础

尽管指针变量内记录的是内存地址,但仍可以进行基础的数学计算。

指针运算是对指针的基础型操作,非常适合操纵数组并配合做动态内存分配

指针进行加减运算的结果,和指针指向内存区域的数据类型有关,以加法为例:

•char 类型指针 +1, 地址+1 (字节)
•int 类型指针+1, 地址+4(字节)
•double 类型指针+1, 地址+8 (字节)
•…
•指针+n或-n,即内存地址 +n * 类型大小 –n * 类型大小
int num = 10;
int* p = #

cout<< p <<endl; //0x10d2ff7e4
p++;
cout<< p <<endl; //0x10d2ff7e8

指针可以进行加减运算,即+、-、++、--    每次加减n,是对内存地址进行 n * 类型大小 的加减

数组对象本身记录的是内存地址(第一个元素地址)可以通过指针运算,完成使用指针存取数组元素

int v[] = {1, 2, 3, 4, 5};
int *p = v;

*p = 11;                // 赋值数组第一个元素
*(p+1) = 22;            // 赋值数组第二个元素
*(p+2) = 33;            // 赋值数组第三个元素

cout << *p << endl;     // 取数组第一个元素
cout << *(p+1) << endl; // 取数组第二个元素
cout << *(p+2) << endl; // 取数组第三个元素

指针运算,简单来说就是对地址的一种计算操作,但仍有一些细节点需要注意,避免出现问题:

求两指针的中间指针(中间地址)

•对于指针p,p++ 和 p+1的区别

动态内存分配

动态内存分配:即由程序员手动的进行内存空间的分配、内存空间的释放等内存管理操作。

整型变量num和整型数组nums,在使用后,后续的程序中没有任何作用了。
•所以num和nums会一直占用内存空间。

 (自动)静态内存分配

C++代码中,变量、数组等对象的创建,是由C++自动分配内存的,称之为(自动)静态内存分配。

(自动)静态内存管理,是不会进行内存空间的自动清理的。(无垃圾回收机制)我们需要手动的管理内存,即手动分配,用完清理。

传统方式创建普通变量或数组,其内存由C++自动管理,称之为:静态内存管理

•静态内存管理,不会清理用不到的内存空间

 动态内存管理

•动态内存管理:程序员手动管理内存空间

手动管理方式:

•new运算符申请空间,提供该空间的指针(地址)
int* p = new int;
int* p1 = new double;
delete p;
delete p1;
•delete运算符申请的空间,仅用于new申请的空间
int* p = new int[5];
delete[] p;

建议:写完new后,立刻写delete,然后再写业务逻辑代码

优势:手动控制内存,避免内存空间浪费

劣势:考验程序员水平,用的好效率高,用不好有反效果

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值