zoukankan      html  css  js  c++  java
  • 说明多级指针与动态变量,静态变量关系的几个简单程序

    // 多级指针

    # include <stdio.h>

    int main(void)
    {
     int i = 1;
     int * p;
     int ** q;
     p = &i;
     q = &p;
     printf("i = %d, p = %d, q = %d ", i, p, q);
     printf("*p = %d, &i = %d, &p = %d ", *p, &i, &p);
     printf("**q = %d, *q = %d, &q = %d ", **q, *q, &q);
     return 0;
     }
     
     /*
         程序输出结果:
             i = 1,    p = 6487628,  q = 6487616
       *p = 1,   &i = 6487628, &p = 6487616
       **q = 1,  *q = 6487628, &q = 6487608
       
       --------------------------------
       Process exited after 0.01289 seconds with return value 0
       请按任意键继续. . .
         结论:
             多级指针就是储存了一个指针变量地址的指针变量。
     */

    // 多级指针与静态变量的缺陷

    # include <stdio.h>

    void f(int ** q)
    {
     int i = 5;
     **q = i;
     
     return;
    }

    int main(void)
    {
     int * p;
     f(&p);
     printf("%d", *p);  // 此处逻辑错误
     
     
     return 0;
     }
     
     /*
         本程序编译正确,但却无法执行,原因是语法上没有错误,但逻辑上有错。
      错误语句为   printf("%d", *p); 此处的 *p 有问题,原因是 *p 相当
      于 i 变量,但程序在执行完被调函数 f 后,就将 i 的内存释放了,接下
      来 i 就不属于此程序的内存,而 *p 访问的是已被释放的内存 i ,这样
      就出现了错误。
     */

    类比于上一个程序。

    // 多级指针与动态变量

    # include <stdio.h>
    # include <malloc.h>

    void f(int ** q)
    {
        *q = (int*)malloc(sizeof(int));
        **q = 5;
     
     return;
    }

    int main(void)
    {
     int * p;
     f(&p);
     printf("%d", *p);
     free(p);  // 释放 p 所指向的内存。
     
     return 0;
     }
     
     /*
         程序输出结果:
         5
      --------------------------------
      Process exited after 0.02017 seconds with return value 0
      请按任意键继续. . .
     由于使用了 malloc 函数,构造了一个动态变量,而动态变量需要手动释放
     可以跨函数使用。
     */

  • 相关阅读:
    Centos6.5安装Oracle11.2.0.4 RAC(完整版)
    VMware搭建Oracle 11g RAC测试环境 For Linux
    Linux CentOS命令行界面字体重复问题解决记录
    SSH公钥认证(码云)
    Git 上传本地仓库到码云
    Git 相关工具及教程地址
    jdk8 新特性stream().map()
    PowerDesigner 使用记录
    IDEA 中.properties文件中文自动转Unicode编码及乱码问题
    idea在Maven Projects中显示灰色的解决办法
  • 原文地址:https://www.cnblogs.com/lnlin/p/6537852.html
Copyright © 2011-2022 走看看