美文网首页
C语言_指针

C语言_指针

作者: 拙峰朽木 | 来源:发表于2018-04-27 17:41 被阅读5次

    @(C语言)

    [toc]

    指针:指针变量存储的是变量类型对应的变量的值

    &(取地址符)

    &:是一个操作符,运用在内存中的对象上面,即变量或者数组元素。

    *(间接寻址符)

    或者叫:引用运算符
    表示指针指向。

    int * p;
    

    p 是一个指针变量名
    *p 是从p指针变量中取出一个int型数据

    指针

    
        int i =10;
        //int型的指针变量 *p 存储的是 int型的数据的变量的地址
        int *p;
        p =&i;
        printf("i 的值: %d \n",i);
        printf("i 的地址: %#X \n",&i);
        printf("p 的值: %#X \n",p);
        printf("p 的地址: %#X \n ",&p);
    
    

    输出:
    i 的值: 10
    i 的地址: 0XEFBFF5AC
    p 的值: 0XEFBFF5AC
    p 的地址: 0XEFBFF5A0

    所以:&是指向变量的地址
    *是指向&变量的地址

    指针的定义与运算

      int a =10;
        int *p =&a;
        *p = *p+10;
        printf("p: %#X, a: %d \n",p,a);
        int y = 1+*p;
        printf("y: %d \n",y);
        *p += 1;
        printf("p: %#X, a: %d \n",p,a);
        (*p)++;
        printf("p: %#X, a: %d \n",p,a);
        *p++;
        printf("p: %#X, a: %d \n",p,a);
    

    输出:
    p: 0XEFBFF5AC, a: 20
    y: 21
    p: 0XEFBFF5AC, a: 21
    p: 0XEFBFF5AC, a: 22
    p: 0XEFBFF5B0, a: 22

    指针运算:
    *p 代表是它所指的地址上面的值的运算
    p++ 是p 指针变量++,结果就是:p指向它的下一个地址

    数组与指针

    数组名就是数组的首地址

    //数组名就是数组的首地址
        int a[5]={1,2,3,4,5};
        int *p =a ;
        int z=3;
        printf("%#X \n",a);
        //a+5表示a移动到数组的第五个位置
        for (int i=0; p<a+5; p++) {
            *p =z;
        }
        for (int i =0; i<5; i++) {
            printf("%d \n",a[i]);
        }
    

    输出:
    0XEFBFF5A0
    3
    3
    3
    3
    3

    指针与函数参数

    void swap(int *a ,int *b){
        int temp =*a;
        *a =*b;
        *b =temp;
        }
    
        int x =10;
        int y =20;
        swap(&x, &y);
        printf("x: %d \n",x);
        printf("y: %d \n",y);
    

    输出:
    x: 20
    y: 10

    指针数组与数组指针

    char * name[] ={"hello","baby","dink","love"};
    //那么name就是个指针数组
    
    char (*name)[] ={"hello","baby","dink","love"};
    //name是数组指针,指向数组的首地址
    
    

    二级指针

     //二级指针存的内容是一级指针的地址
        // p的值就是p的这个变量,这个变量保存的是a 的地址
        //*p运算,得到的就是a的值
        //*p2运算,得到的就是p的值
        //**p2运算,得到的就是p的值的*运算得到的值 a;
        int a =100;
        int * p;
        p =&a ;
        
        int **p2;
        p2 =&p;
        
        // **p 的值是a--> *P2==P --->**P2==*P==a
    

    函数指针

    函数在内存中存储就是一段地址,而函数名就是这段地址的首位。

        //
        int plus(int a,int b){
        return a+b;
        }
        //返回类型+参数类型
        int (*calc)(int a,int b);
        calc =plus;
        int result =calc(3,5);
        printf("result :%d \n",result);
    

    相关文章

      网友评论

          本文标题:C语言_指针

          本文链接:https://www.haomeiwen.com/subject/vhdilftx.html