指向数组的引用 const char(&p)[a]

在C++中,当数组作为参数传递给函数时,它会退化为指针,导致无法在函数内部获取数组的大小。通过使用指向数组的引用`const char(&p)[a]`并结合模板,可以防止数组退化,使`sizeof`操作返回数组的实际大小。这样,函数能够利用模板动态推断数组长度,并且`const`保证不修改原始字符串。传入`NULL`会报错,优于使用`char*`的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指向数组的引用 const char(&p)[a]

问题起源:
如何在函数内,也能获取数组的大小信息

如果是定义一个数组a后,使用如下方法即可获取大小信息

cout << sizeof(a) / sizeof(a[0]);

但是如果作为一个参数传入到一个函数中,比如

void f(int* a); 
void f(int a[]);

则均无法在函数内用上述代码获取数组的大小信息,此时获取到的只是指针大小(具体大小与环境设置有关)。
原因就在于数组进入函数时会退化为指针以节省空间。

为使其不发生退化,以保存其大小信息,想到使用引用

但不能直接声明数组的引用(如下):

void f(int (&a)[]);

原因是类型不完整——因为作为一个数组而言,没有大小信息

因此利用模板特性,为其增加大小的信息:

template<int SIZE>
void f(int (&a)[SIZE]);

(注:数组的引用和引用的数组不同,详情可见:[C++]关于数组的引用和引用的数组

文字终究词不达意,直接上代码吧,意思都在代码里了:

核心在于如何看待这几个:

int* p ; int* (&p), int (&i_ref)[] ; 

char* p; char * (&p) , char (&c_ref)[], 

const char* p; const char * (&p) , const char (&c_ref)[]
//int* p ; int (&i_ref)[] ; char* p; char (&c_ref)[]
void fooCharP<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值