• 指针


     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搞定

  • 相关阅读:
    Git 游离态的一次问题解决
    idea每次新建项目的默认路径
    springboot 整合 freemarker
    Linux 学习网站
    springtask 基本使用和 cron 表达式
    volatile 关键字 和 i++ 原子性
    python 自动补全
    nagios维护之常见问题
    nagios维护之添加监控
    windows下python文件与文件夹操作
  • 原文地址:https://www.cnblogs.com/ajiaoa/p/14027059.html
Copyright © 2020-2023  润新知