zoukankan      html  css  js  c++  java
  • C++指针二(易错模型)

    规则一:Main(主调函数)分配的内存(在堆区,栈区、全局区)都可以在被调用函数里使用。如果在被调用函数里面的临时区(栈)分配内存,主调用函数是不能使用的。

    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    
    char * getstring1()
    {
        char *p1 = "abcde";
        return p1;
    }
    
    char * getstring2()
    {
        char *p2 = "abcde";
        return p2;
    }
    
    char * getstring3()
    {
        char buf[30];
        strcpy(buf, "abcde");
        return buf;
    }
    
    void main()
    {
        int i= 0;
    
        //指针指向谁就把谁的地址赋给指针变量。
        char *p1 = getstring1();
        char *p2 = getstring2();
        char *******    p3 = NULL; //p3 是个变量
      //     printf("p1:%s
    ", p1);
    //     printf("p2:%s
    ", p2);
    // 
    //     printf("p1:%d
    ", p1);
    //     printf("p2:%d
    ", p2);
    
        printf("p4:%s
    ", p4);
    
    
        //指针变量和它所执行的内存空间变量是两个不同的概念
        strcmp(p1, p2);
    
        system("pause");
    }

    规则二:间接赋值,注意内存冲突。

    #include "stdio.h"
    #include "string.h"
    #include "stdlib.h"
    //看见一级指针,要去分辨指针的输入输出特性
    //指针的输入特性:在主调函数里面分配内存,在被调用函数里面使用
    //指针的输出特性:在被调用函数里面分配内存,主要是把运算结果甩出来
    int getLen3(int *p /*in out*/)
    {
        //*(NULL) = 40;
        //*(0)  = 40;
        *p = 40; //间接赋值 如果p是a的地址,那么就间接的修改a的值           //*p形参,去间接的修改实参的值
    }
    void main()
    {
        int    a = 10; //定义了一个变量(实参)//a看成0级指针
        int *     p = NULL; ////定义了一个变量(形参)//1级指针
        a = 20; //直接修改a的值
        printf("a:%d 
    ", a);
        //p = &a; //a的地址赋给p //把一个变量去地址传给另外一个变量 //实参取地址传给形参
        getLen3(p);
        getLen3(NULL);    
        printf("a:%d 
    ", a);
        system("pause");
    }     
    //*(NULL) = 40;
    //*(0)  = 40;
    getLen3(NULL);
    不同的编译器会有不同的提示。地址为为零的内存空间归系统所以,程序修改里面的内容,会出错。
  • 相关阅读:
    获取Spring项目配置文件元素
    MyEclipse安装插件的几种方法
    排序-->桶排序
    排序-->冒泡排序
    排序-->选择排序
    排序-->插入排序
    约瑟夫问题----(数组+list)实现
    约瑟夫问题--->环形链表
    py---pycharm快捷键
    双向链表--简单的增删改查
  • 原文地址:https://www.cnblogs.com/CentForever/p/4640503.html
Copyright © 2011-2022 走看看