C++指针与数组

指针的初始化

给指针赋值的只能是内存的地址,有两种情况
1.如果内存被命名了,那可以用&符号去提取内存的地址
2.如果内存没有被命名,那可以用new符号返回未命名内存的地址

int a = 1;
int* p = &a;//1
int* q = new int;//2

指针与数组

数组名与指针大部分情况下相同,C++将数组名解释成地址,具体来说,数组名为数组第一个元素的地址,但两者情况有区别,第一个是数组名是常量而指针可以修改,第二个是sizeof的区别。

int A[10] = {0};

下面两个式子永远等价
A[i] == *(A+i)
&A[i] == A+i

动态数组

动态数组需要用new关键字创建数组(注意最后要用delete[]释放内存),相比于普通数组,动态数组的数组长度不需要在初始化时定义,从而满足更灵活的代码需求。

int size;
cin>>size;
int* p = new int[size];

Vector模板类代替动态普通数组

相比于动态普通数组,vector自动delete,建议在创建动态数组时使用vector模板类创建。

例如:

  • API
  • 支持模型类型

数组作为函数参数

当类似于void func(int A[],int n)的函数时,C++实际上把int A[]当作为int *A,即把A当作成一个指针;(除了这种方式,还有种方式是传递两个指针,一个指向数组开头,一个指向数组结尾),因此在把数组当作函数参数时,传给函数的有三个东西:数组的地址、数组元素的种类以及元素的数量;
将数组作为指针意味着:当数组作为参数时,由于函数接收到的是数组的地址,因此在函数对其形参进行修改时,实际上是会影响到实参的
由于数组作为形参会影响实参的值,因此常常需要用const来保证安全性;

void func(const int A[],int n)
//类型const int * A,A指向常量;

结构作为参数传递时,处理甚至比数组简单,因此结构名等价于常规变量名,数组作为参数比较特殊的根本原因是因为数组名是地址,而常规变量和结构要获取地址还要用&符号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一镜花水月一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值