指针与引用

本文详细介绍了C++中指针的声明、void指针的使用、const指针的概念及注意事项、const字符串陷阱以及引用的基本用法。通过具体实例说明了如何避免常见错误,并解释了引用与指针的区别。

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

1)      指针的声明/定义

int* pA, pB, pC; 只有pA是指针,其他两个是int

如果想这样写,可以用typedef int* IntPointer

IntPoint pA, pB, pC;

 

2)      void指针的用法

void* 使得类型信息丢了,如果转型出错,会使得程序出错或崩溃。尽量少用。

没有void引用,因为它是无类型的,无法直接访问数据。

void 一般用在函数返回值和函数参数(void指针)上。

 

3)      const 指针

l       指向的内容是const

以下两者写法皆可:

const int* a;

int const* a;

l       指针本身是const

int* const a;

l       两者都是const

以下两种写法皆可:

int const* const a;

const int* const a;

 

4)      const 字符串陷阱

char* p = “hello”; //这时,”hello”是常量,p指针是一个指向常量的指针

所以,严格的写法应该是 const char* p = “hello”

 

如果,p[0] = ‘a’;则程序运行崩溃,因为试图去更改常量区,行为是未定义的。

 

如果想要改变一个数组,需要这样定义:

char p[] = “hello”; //注意 char [] p = “hello”是错误的!

“hello”将保存在全局静态区,而不是常量区,p指向首地址。

 

5)      引用

l       引用的作用像常量型指针,它是运算符重载的基础

比如,定义两个对象相加

Integer& operator + (Integer& left, Integer& right)

 

Integer a, b, c;

c = a + b;

如果没有引用,为了提高效率用指针,相当的晦涩且语义也不明确

l       引用声明时必须初始化且只能初始化一次且不能为NULL,这是与指针的一个区别

l       const 引用

以下是错误的:

int& a = 1;

因为1是常量,如果可以指向一个常量,那么就可以改变它了。

这样才是对的,const int& a = 1;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值