zoukankan      html  css  js  c++  java
  • C++指针一

    指针也是变量,占有内存空间,用来保存内存地址。

    指针也是一种数据类型,指针是一种数据类型,是指它所致内存空间的数据类型。

    指针变量和它指向的内存块是两个不同的概念

      *p操作内存

      在指针声明时,*号表示所声明的变量为指针

      在指针使用时,*号表示操作指针所指向的内存空间中的值

      *p相当于通过地址(p变量的值)找到一块内存;

      然后操作内存 *p放在等号的左边赋值(给内存赋值)

      *p放在等号的右边取值(从内存获取值)

    #include <iostream>
    using namespace std;
    #include <stdio.h>
    void change(int num){
        num=666;
    }
    void changeA(int *num){
        *num=666;
    }
    void printfSingleArrayInt(int *p,int n){
        cout<<"/**********************************/"<<endl;
        cout <<p<< endl;
        cout<<sizeof(p)<<endl;//4
        for(int i=0;i<n;i++){
             cout<<*(p+i)<<endl;
        }
        cout<<"/**********************************/"<<endl;
    }
    void printfSingleArrayIntS(int a[10]){
        cout<<"/*****************s*****************/"<<endl;
        cout<<sizeof(a)<<endl;//4
        for(int i=0;i<10;i++){
             cout<<*(a+i)<<endl;
        }
        cout<<"/**********************************/"<<endl;
    }
    int main(){
        int a[10]={0};
        for(int i=0;i<10;i++){
            a[i]=i;
        }
        int *p;
        //指针的步长,根据所指内存空间类型来定。
        cout<<sizeof(p)<<endl;//4
        p=a;
        cout<<sizeof(p)<<endl;//4
        cout<<sizeof(a)<<endl;//40
        cout<<sizeof(a+1)<<endl;//4
        cout<<sizeof(&a)<<endl;//4
        cout<<sizeof(&a+1)<<endl;//4
        printfSingleArrayInt(p,10);
        printfSingleArrayIntS(a);
        printf("%d %d
    ",a,a+1);
        printf("%d %d
    ",&a,&a+1);
        return 0;
    }
    int main01()
    {
        int  num=100;
        int *p=&num;
        cout <<&num<< endl;//打印num的地址
    
        num=1;//直接修改num的值
        cout <<num<< endl;//打印num的值
    
        *p=100000;//间接修改num的值
        //*p放在等号的左边间接修改内存空间的值
        /**  *p 的意义:*就像一把钥匙,根据一个指针变量的值,去修改门后门的内存空间  **/
        cout <<num<< endl;
    
        change(num);
        cout <<num<< endl;
    /*
       间接赋值成立的三个条件
        a)2个变量(通常一个实参,一个形参)
        b)建立关系,实参取地址赋给形参指针
        c)*p形参去间接修改实参的值
    */
        changeA(p);
        cout <<num<< endl;
    
        int a=*p;////*p放在等号的右边从内存空间中拿值
        cout <<a<< endl;
    /*
        {
            char *b=NULL;
            *b='j';
        }
    */
        return 0;
    }

        cout<<sizeof(a)<<endl;//40   a所对应的地址所包含数据类型的长度
    cout<<sizeof(a+1)<<endl;//4
    cout<<sizeof(&a)<<endl;//4 &a是数组a的地址,占四个字节
    cout<<sizeof(&a+1)<<endl;//4 &a+1是数组a+1的地址,占四个字节

    a,a[0],&a这三个元素打印的地址是相同的。

    a+i 表示的是以内存地址a移动了i个int的地址。

        printf("%d %d
    ",a,a+1);
        printf("%d %d
    ",&a,&a+1);

    &a 与 &a+1 之间相差了几个元素呢?

      &a代表的是把数组看成一个整体取地址

      &a + 1 则表示数组作为一个整体移动了一个元素(数组)。

    间接赋值成立的三个条件

    a)2个变量(通常一个实参,一个形参) b) 建立关系,实参取地址赋给形参指针 c) *p形参去间接修改实参的值

  • 相关阅读:
    postgresql 9.x stream status check
    postgresql 物理备份 tar 命令
    centos 6.8 + postgresql 9.6 + yum 的一些路径
    debian8.2 + postgresql 9.1 + apt-get 的一些路径
    window 2012 上安装 sql server 2005 出错的解决方案
    postgresql 计算时间差的秒数
    centos 6.8 + postgresql 9.6 + pgagent
    postgresql 9.1 查看表和索引的大小
    centos 6.8 + postgresql 9.6 + pg_stat_statements
    centos 6.8 + postgresql 9.6 + file_fdw
  • 原文地址:https://www.cnblogs.com/CentForever/p/4640483.html
Copyright © 2011-2022 走看看