C++指针

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

声明:

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

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

C++还有一种指针类型:

void* p;//表示我们知道这是指针但是不知道数据类型
//到现在为止没有遇见过

解引用符号 *:

int num=1024;
int* pnum=#
cout<<*pnum<

指针的运算

指针是一个变量,可以进行多种运算,但是运算时要小心容易出现错误。


    int num=1024;
    int* pnum=#

//地址后移:
    //cout<<*pnum<

改变变量num:

int num=1024;
int* pnum=#

//变量num的改变

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

几种指针:

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

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

数组名就是常量指针。

//正确声明常量指针:
int num=1024;
int* const pnum=# 

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

指针函数:

  1. 指针作为参数
    void change(int* p)
    {
        (*p)++;
    }
    int main()
    {
        int num=1024;
        int* pnum=#
        change(pnum);
        cout<

  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<

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


Circle::Circle()
{
    double r=1;
}

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

指针的作用域:当被改变的是指针指向的地址时即修改的是指针本身时,修改只在函数内生效。但是修改的是指针指向的数据的数值时,其不被函数作用域限制。

你可能感兴趣的:(C++,c++)