发布时间:2022-08-19 12:28
指针的概念
指针保存了一个内存地址,对指针的操作就是对地址的操作。
可以将内存理解为一个“大数组”,指针相当于存储了一个数组下标,它指向下标对应位置的变量。
指针的声明
&
运算符被称为取地址运算符,它返回变量在内存中的地址。void指针可以指向任意类型的值。
int a;
int *ptrToA = &a;
double b;
double *ptrToB = &b;
void *voidPtrToA = &a;
void *voidPtrToB = &b;
取地址运算符不能作用于常量或表达式,如int *ptr = &2;
或者int *ptr = &(a + b);
。因为他们在内存中并没有固定的地址。
空指针
空指针的值可以用NULL
(C和C++98的风格)或者nullptr
(C++11新标准)表示。他们的值都是0x0
,表示指针不指向任何对象。
//cite from
#ifndef __cplusplus
#define NULL ((void *)0) // C语言
#else
#define NULL 0 // C++
#endif
可以发现,C语言的NULL保证为void*
类型,但C++的NULL仅为常量0
。在C++中使用NULL宏可能会导致函数重载错误。相比之下, C++11引入的nullptr
始终保证其为指针类型。
在C++代码中,建议使用nullptr
。
指针赋值
int *intp = &x; //让指针指向某一变量
int *intp1 = &x, *intp2;
intp2 = intp1; // 同类型的指针之间可以赋值,赋值相当于改变了指针指向的对象。
间接访问
为了访问指针指向的值,我们使用*
符号,这被称为解引用运算符:
*ptr
的值为指针指向的变量的值;*ptr
的修改会作用到原对象上。