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

2023-03-02 20:03:56 学习 指针 详解

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
}

到此这篇关于C++学习之指针的使用详解的文章就介绍到这了,更多相关C++指针内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关文章