• C/C++ 指针


    一:指针

    (1)指针的概念:程序的变量和常量都存储在一个地址数值中,内存地址就表示变量或者常量在内存中的存储位置。
    指针就是存储内存地址的变量。

    例如:int p = 0; int *q = &p;

    (2)指针操作数组

    int a[]={1,2,3,4};
    int *p = &a[0]; => *p = a; p代表数组a[0]首地址

    int p1 = &a[2];
    int diff = p1-p; //计算的是地址距离 =2 ;而不是字节数

    double beans[5][5];
    double pbeans = *beans[0][0];

    double *pbeans = beans[0] //等于首位的地址 数组他是顺序存储的

    (3) const对象指针和const的区别

    const 指针 和 指向 const对象的指针的区别:
    指向 const对象的指针 :指针指向const对象的地址,我们可以使用指针来修改里面的数值,地址本身是不能修改的。

    const double *cptr; //cptr 指向的是一个double类型的数值, cptr地址数值是可以改变的

    cptr 本身不是const,const 只是限定了 cptr必须指向double类型的对象,但是double类型里面数值是不能更改的。


    const指针的数值不能修改但是可以修改指向对象的数值,指向const变量的指针不能修改const变量的数值但是可以修改本身的数值

    const char * pc = "abcd” //表示pc指针指向的是一个字符串常量,所以不能改变常量的数值
    char * const pc = "abcd” //表示 pc是一个常量地址数值,指向的是’abcd”的地址不能改变这个地址数值但是可以改变字符串的数值。

    (4)数组指针和指针数组的区别

    数组指针就是普通的数组
    例如: int a[2] = {1,2};

    指针数组,就是数组里存放的数据是指针类型:

    char *charset[] = {"aaaaa","bbbb","cccc"};

    #include<iostream>
    using namespace std;
    int main(void)
    {
    const char* pc = "abcd";
    char* const pb = "aaccdd";

    pc = "FGCD"; // 可以修改地址数值,但是不能修改字符串常量的数值

    cout<<pc[0]<<endl;

    pb[0] = 'A'; // 段错误
    cout<<pb[0]<<endl;
    return 0;
    }

    (5) 函数指针
    函数指针:指向函数的指针,函数存放也是需要在内存中存放的,函数也是有地址数值的。
    函数指针也指向某个特定的类型,函数类型尤其返回类型和形参决定的,与函数名称无关。

    函数指针的示例代码如下:

    int (*f)( int x )
    double (*ptr)(double x)

    //声明一个函数
    int fun( int x )
    //声明一个函数指针;
    int (*f)(int x)

    f = fun; // fun 函数的首地址赋值给函数指针


    // 定义函数指针
    int (*p)();

    p = f //赋值

    (*p)(a,b); //调用函数指针


    指针函数和函数指针的区别:

    指针函数:返回类型是指针类型的函数,本质是函数。
    函数指针:函数指针是指针,一个指向函数的指针。



    (6) this指针

    this指针是一个隐含的指针,表示当前对象的数值。

    void Date::SetMonth( int m )
    {
    month = m;
    this->month = m ; // this指针

    }

  • 相关阅读:
    android自己定义控件系列教程----视图
    Android怎样监听蓝牙耳机的按键事件
    Putty SSH简单使用
    Linux配置无线网卡驱动实现无线上网
    Oracle在中文环境下出现乱码解决办法
    百度云盘破解限速|个人值得拥有
    Ubuntu安装出现左上角光标一直闪解决方式
    ubuntu-16.4TLS安装QQ
    2015毕业找工作纪实|一年的蜕变毕业生
    安装rpm包时遇到Header V3 DSA signature: NOKEY时解决办法
  • 原文地址:https://www.cnblogs.com/love-life-insist/p/12802874.html
Copyright © 2020-2023  润新知