zoukankan      html  css  js  c++  java
  • 指针

     1 #include<stdio.h>
     2 //2020年11月23日20:58:58
     3 int main(void)
     4 {
     5    double * p;
     6    double x = 66.6;
     7    
     8    p = &x;//x占8个字节,1个字节是8位,1个字节1个地址,
     9           //p存放的是第一个字节的地址,而不是8个字节的地址
    10    double arr[3]={1.1,2.2,3.3};
    11    double * q;
    12    
    13    q=&arr[0];
    14    printf("%p
    ",q);
    15    q=&arr[1];
    16    printf("%p
    ",q);
    17    return 0;
    18 }

    其中%p是以十六进制输出;

    可以看到 arr[0]和arr[1]地址相差8个字节(double类型)。


    题2:

     1 #include<stdio.h>
     2 //2020年11月23日20:58:58
     3 void f(int *);
     4 int main(void)
     5 {
     6    int i=9;
     7    int * p =&i;//等价于int * p; p=&i;
     8    //现在想要修改p的值(不是i的值哦)
     9    //先打印一下p的值看一下
    10    printf("%p
    ",p);
    11    f(p);//error,p也是一个变量,需要传递p的地址才能修改p的值
    12    //f(p);
    13    printf("%p
    ",p);
    14    return 0;
    15 }
    16 void f(int * q)
    17 {
    18     q=(int *)0xffffffff;
    19 }

     可以看到p的值并未改变,因为p和q是两个变量,改变q的值不会影响p的值;

    下面来传递地址试试看呢?

     1 #include<stdio.h>
     2 //2020年11月23日20:58:58
     3 void f(int **);
     4 int main(void)
     5 {
     6    int i=9;
     7    int * p =&i;//等价于int * p; p=&i;
     8    //现在想要修改p的值(不是i的值哦)
     9    //先打印一下p的值看一下
    10    printf("%p
    ",p);
    11    //f(p);//error,p也是一个变量,需要传递p的地址才能修改p的值
    12    f(&p);
    13    printf("%p
    ",p);
    14    return 0;
    15 }
    16 void f(int ** q)
    17 {
    18     *q=(int *)0xffffffff;
    19 }

     OK搞定

  • 相关阅读:
    MySQL 5.7 多主一从实现
    从 MySQL 全备的 SQL 文件中抽离出某张表的数据
    KUBERNETES 03:Pod 资源清单
    KUBERNETES 02:基本操作命令
    KUBERNETES 01:说明与安装
    DOCKER 08:搭建本地镜像仓库 Harbor
    DOCKER 07:docker swarm
    DOCKER 06:docker compose
    DOCKER 05:数据持久化
    DOCKER 04:容器资源限制和网络原理
  • 原文地址:https://www.cnblogs.com/ajiaoa/p/14027059.html
Copyright © 2011-2022 走看看