zoukankan      html  css  js  c++  java
  • 关于CSDN指针讨论的心得

    http://topic.csdn.net/u/20080529/16/d408b4ce-32f5-486a-af22-5e40f592696a.html

    void CDlgTestDlg::OnButton1() { TCHAR* arr="1"; test(arr); MessageBox(arr); //弹出1 } void CDlgTestDlg::test(TCHAR* pChar) { pChar="2"; //这里修改了值 MessageBox(pChar); //弹出2,已经修改了值,它传递的是地址啊,为什么上面还是弹出1呢? }

    我做一些测试。

    代码一:

       1: #include "stdafx.h"
       2: #include <iostream>
       3: using namespace std;
       4: void Test(char* p)
       5: {
       6:     cout<<"in TEST function scope"<<endl;
       7:     p = "test";
       8:     cout<<"p address: "<< &p <<endl;
       9:     cout<<"p point value : "<<p<<endl;
      10: }
      11:  
      12: int _tmain(int argc, _TCHAR* argv[])
      13: {
      14:     char* p ="1";
      15:  
      16:     cout<<"p address: "<< &p <<endl;
      17:     cout<<"p point value : "<<p<<endl;
      18:  
      19:     cout<<"run test function"<<endl;
      20:     
      21:     Test(p);
      22:  
      23:     cout<<"out test scope"<<endl;
      24:  
      25:     cout<<"p address: "<< &p <<endl;
      26:     cout<<"p point value : "<<p<<endl;
      27:  
      28:     
      29:  
      30:     int i;
      31:     cin>>i;
      32:     return 0;
      33: }

    结果是这样的:

    p address: 0012FF60
    p point value : 1
    run test function
    in TEST function scope
    p address: 0012FE80
    p point value : test
    out test scope
    p address: 0012FF60
    p point value : 1

    跟发帖人的情况一样.

    来看test函数

       1: void Test(char* p)
       2: {
       3:     cout<<"in TEST function scope"<<endl;
       4:     p = "test";
       5:     cout<<"p address: "<< &p <<endl;
       6:     cout<<"p point value : "<<p<<endl;
       7: }

    在函数test域中,p指针已经是有新的地址 - 0012FE80,并且指向的值是test

    经过test后,p指针在_tmain 域中仍然没有变,地址是0012FF60, 指向值是1

    代码二:仅仅+入一个符号 &

       1: void Test(char* &p)
       2: {
       3:     cout<<"in TEST function scope"<<endl;
       4:     cout<<"p point original value : "<<p<<endl;
       5:     p = "test";
       6:     cout<<"p address: "<< &p <<endl;
       7:     cout<<"p point value : "<<p<<endl;
       8: }

    结果就不一样了。

    p address: 0012FF60
    p point value : 1
    run test function
    in TEST function scope
    p point original value : 1
    p address: 0012FF60
    p point value : test
    out test scope
    p address: 0012FF60
    p point value : test

    通过引用符,传递的是一个引用指针,而不用再复制一个新的指针。因此,还是原来的指针。

  • 相关阅读:
    VSCode中按ESLint规则格式化Javascript代码
    VSCode设置资源管理器字体大小
    Windows下利用安装压缩包安装MySQL
    Windows部署Apache 2.4.46及PHP 8.0.3
    npm设置国内镜像
    IDEA运行Tomcat输出信息乱码
    深入理解jvm虚拟机读书笔记-Java内存区域与内存溢出异常
    Navicat Premium
    mysql安装
    ElasticSearch 基础
  • 原文地址:https://www.cnblogs.com/king_astar/p/1530639.html
Copyright © 2011-2022 走看看