c++ 指针的声明

发布时间:2024年01月17日

指针是一个变量,它存储了内存中某个值的地址。声明一个指针需要在其类型后加上一个星号(*)。正确地声明和初始化指针是使用指针时避免错误和未定义行为的关键。

1、指针的声明:

可以声明一个类型指定的指针,它指向该类型的值。

指向基础数据类型的指针
int* pInt; // 声明一个指向int类型数据的指针
double* pDouble; // 声明一个指向double类型数据的指针
char* ptrToChar; // 声明一个指向char的指针
指向数组的指针
int arr[10];
int (*ptrToArray)[10] = &arr; // 指向含有10个整数的数组的指针
指向指针的指针(多级指针)
int** ptrToPtrToInt; // 指向 int* 的指针
指向函数的指针
void (*ptrToFunc)(int); // 指向返回 void 并接受 int 参数的函数的指针


// 假设有一个返回类型为 int,并接受两个 int 类型参数的函数
int add(int a, int b) {
    return a + b;
}
auto functionPtr = add;//使用 auto 关键字进行类型推导(C++11 及更高版本)

typedef int (*AddFuncPtr)(int, int); // 使用 typedef
// 或者 C++11 及更高版本
using AddFuncPtr = int (*)(int, int); // 使用 using
// 使用 typedef 或 using 创建的别名来声明函数指针
AddFuncPtr functionPtr = add;
int result = functionPtr(3, 4);
指向对象或类成员的指针
class MyClass {
public:
  void memberFunc();
};
MyClass* ptrToObject; // 指向 MyClass 对象的指针

void (MyClass::*ptrToMemberFunc)() = &MyClass::memberFunc; // 指向 MyClass 成员函数的指针

使用 auto 声明指针

在 C++11 及更高版本中,可以使用 auto 关键字自动推导变量的类型
int value = 5;
auto* ptr = &value; // 自动推导为 int 类型的指针
或者可以省略星号,直接用 auto
auto ptr = &value; // ptr 是一个指向 int 的指针

指针声明的语法注意事项

指针类型和变量名称之间的星号 (*) 可以紧靠类型,也可以紧靠变量名,甚至有人喜欢放在它们中间,但推荐的做法是紧挨着类型,这样更清楚地表示了类型
int* ptr; // 表示 ptr 是一个指针,指向 int
int *ptr2;
int * ptr3;
如果声明多个指针,需要在每个指针变量前加星号;
只在类型前加一个星号,则只有第一个变量是指针。
int* ptr1, * ptr2; // ptr1 和 ptr2 都是指向 int 的指针
int* ptr1, ptr2; // ptr1 是指向 int 的指针,ptr2 是 int 类型的普通变量
const 修饰符与指针
在涉及指针的声明中,const 可以用来修饰指针所指向的数据类型,指针本身,或者两者都修饰。
const int* ptr1;    // ptr1 是指向 const int 的指针(指针可以改变,所指向的 int 不能改变)
int const* ptr2;    // 同上,ptr2 也是指向 const int 的指针
int* const ptr3;    // ptr3 是 const 指针,指向 int(int 可以改变,指针不能改变)
const int* const ptr4; // ptr4 是 const 指针,指向 const int(两者都不能改变)
声明指针时,务必小心,确保明确了指针的意图和使用方式,这是写出清晰、可读和安全代码的基础。
文章来源:https://blog.csdn.net/weixin_43779276/article/details/135623006
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。