C++数组(二维数组)与指针 以及 函数传递/返回指针和数组参数

这篇教程总结了C++中的指针和数组,包括指针基础、数组定义与初始化、指针与数组的关系、多维数组、指针形参和数组形参的使用,以及函数返回指针和数组的方法。文章强调了指针在C++中的重要性,特别讨论了指针与二维数组的交互,以及在函数参数传递中的应用。
摘要由CSDN通过智能技术生成

本文参考资料 C++ Primer, 5e; Coursera北大数据结构与算法课程。

1. 概论

很全面的指针在C\C++语言中是很重要的内容,并且和指针有关的内容一向令人头大。在本教程中,我总结了一些关于指针和数组的用法(尤其是指针和二维数组)。大部分关于指针和数组的问题应该可以再本文找到答案。

2.指针基础

指针是指向另外一种类型的复合类型。
指针本身就是一个对象,允许对指针进行赋值和拷贝;指针无需在定义时赋初值。

指针定义
“&”是取地址操作符。

int num=1;
int *p=# //(&是取地址操作符)

利用指针访问对象
使用解引用操作符“*”。

cout<<*p<<endl;

输出结果为1。

指针的状态

  • 指向一个对象
  • 指向紧邻对象所占空间的下一个位置
  • 空指针 int *p=nullptr;
  • 无效指针

指针作为条件判断参数
例如:

if(p){}

只要指针p不是0,那么条件就为真。
另外值得注意的是,对于两个类型相同的指针,可以用“==”或者“!=”来比较。若两个指针存放的地址相同,则它们相等,否则不等。

3. 指针进阶

指向指针的指针
由于指针是对象,所以指针也有自己的地址。因此,C++语言允许把一个指针指向另一个指针。
例子:

int i=9;
int *p1=&i;
int **p2=&p1;
cout<<i<<endl<<*p1<<endl<<**p2<<endl;

结果是打印3个9。

指针与const限定符
这里有2个初学者容易混淆的概念,及指向常量的指针常量指针。根据其英文名字可能比较容易记住:
指向常量的指针(pointer to const)是说这个指针是一个普通的指针,它指向了一个常量,如果你愿意,它也可以指向其他对象,并且可以令一个指向常量的指针指向另一个非常量;

const double pi=3.1415;
double *p1=&pi;//error for p1 is a general pointer
const double *p2=&pi;//correct
*p2=6.28;//error for pi is a const variable and p2 is const

常量指针(const pointer)是说这个指针本身就是一个常量对象,所以它不能指向其他对象,但是不意味着它不能改变所指向对象的值。

int num=9;
int *const p1=&num;//correct, but remember that p1 cannot point to other objects
*p1=18;//correct. You can use the const pointer to change the value of a unconst variable
const double e=2.71;
const double *const p2=&e;//p2 is a const pointer points to a const object

4. 一维数组的定义与初始化

定义

int arr[10];//含有10个整型的数组
int *arr2[3];//含有3个整型指针的数组

一般情况下,数组的元素被默认初始化。

显示初始化

int arr[]={
  1,2,3};
int arr2[4]={
  1,2,3,4};

可以用字符串字面值初始化字符数组,但是需要记得字符串字面值结尾有一个空字符

char arr[5]={
  'h','e','l','l','o'};//correct
char arr[5]="hello";//error, initilizer-string for the chars array is too long

访问数组元素
使用下标访问数组元素,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

痴澳超

如果感觉博客有帮助,请我喝杯咖

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

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

打赏作者

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

抵扣说明:

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

余额充值