C++学习之指针的使用详解

C++中指针储存一个地址

声明:

datatype* p; datatype表示指针指向的数据类型。

int num=0;
int* pnum=#
//&是地址运算符,&num表示num这个变量存储的地址
//int*声明了pnum是一个指针变量

解引用符号 *:

int num=1024;
int* pnum=#
cout<<*pnum<<endl;//结果是num的值:1024

指针的运算:

     int num=1024;
    int* pnum=&num;
 
//地址后移:
    //cout<<*pnum<<endl;
    cout<<pnum<<" ";
    pnum=pnum+sizeof(int);
    cout<<pnum;//输出 0x61ff08 0x61ff18

改变变量num:

int num=1024;
int* pnum=&num;
 
//变量num的改变
 
(*pnum)++;//此时num的值变为1025,注意:不加括号可能出错。

几种指针:

常量指针:声明之后不可更改(指向一个不变的内存位置,但该位置存储的内容可以改变)

声明常量指针时数据类型在前,并且声明和初始化必须在同一行

数组名就是常量指针。

//正确声明常量指针:
int num=1024;
int* const pnum=&num; 
 
//错误声明:
const int* pnum=&num;//指针不是常量,但是不能通过该指针改变该数据。
num=64;//no problem,可以改变变量值
*pnum=100;//wrong

指针函数:

1.指针作为参数

void change(int* p)
{
    (*p)++;
}
int main()
{
    int num=1024;
    int* pnum=&num;
    change(pnum);
    cout<<num;//输出1025
    return 0;
}

2.指针作为返回结果

int* change(int* p)
{
    p=p+1;//指针向后移动
//指针p为常量指针 p+1的结果更像是指向下一个数组元素
 
    return p;
}
 
 
int main()
{
    int list1[3]={1,2,3};
    int* plist1=list1;
    plist1=change(plist1);
    cout<<*plist1<<endl;//输出2
    return 0;
}

3.this指针:访问其他数据域的参数。

Circle::Circle()
{
    double r=1;
}
 
Circle::Circle(double r)
{
    this->r=r;//调用上一个作用域的r
}

原文地址:https://blog.csdn.net/m0_63823490/article/details/129169408