C/C++指针参数赋值问题

C/C++指针参数赋值问题

  今天遇到一个问题,即在C/C++中,关于在函数里对指针赋值的问题。首先可以看到如下现象: 

void test(int *p)
{
    p = NULL;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int *t , y = 10;
    t = &y;
    test(t);

    return a.exec();
}

  <span>C/C++指针参数赋值问题</span>

  这个结果令我有点吃惊,我一直以为传递指针,赋值完这个指针也会变的,没想到其实指针也是一个变量,我们如果要改变它,必须找到它在内存中的地址,也就是指针的地址。也就是说,对于函数中,如果对指针的地址进行赋值,事实上是改变不了原指针的!

  

void test(int **p)
{
    *p = NULL;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int *t , y = 10;
    t = &y;
    test(&t);

    return a.exec();
}

  <span>C/C++指针参数赋值问题</span>

 

 另外,用引用赋值也可以解决这个问题:

void test(int &p)
{
    int n = 9;
    p = n;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int t , y = 10;
    t = y;
    test(t);

    return a.exec();
}

  <span>C/C++指针参数赋值问题</span>

   另外,可以修改指针指向的内容,而不是修改指针地址,也可以改变内容。

  例子1:

void test(int *p)
{
    int n = 9;
    *p = n;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int *t , y = 10;
    t = &y;
    test(t);

    return a.exec();
}

  <span>C/C++指针参数赋值问题</span>

   例子2:

void test(int *p)
{
    int n = 9;
    *p = n;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int t , y = 10;
    t = y;
    test(&t);

    return a.exec();
}

  <span>C/C++指针参数赋值问题</span>

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119447.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • goland激活(在线激活)「建议收藏」

    goland激活(在线激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    428
  • 微信开放平台网站应用扫码登录

    微信开放平台网站应用扫码登录<?phpnamespaceapp\common\wechat;/***微信开放平台*Date:2020/9/080015*Time:上午10:03*/classWXOpenPlatform{privatestatic$appId=’xxxxxxxxxxxxxxxxxxxxxxxxx’;privatestatic$appSecret=’xxxxxxxxxxxxxxxxxxxxxxxxx’;privatestati.

    2022年5月26日
    38
  • jsonObject_jsonobject.tobean

    jsonObject_jsonobject.tobeanJSONObject简介转自:http://blog.csdn.net/huangwuyi/article/details/5412500JSONObject与JSONArray的使用一、JAR包简介     要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包:     1.commons-lang.jar     2.comm

    2022年9月15日
    4
  • Docker常用命令大全「建议收藏」

    Docker常用命令大全「建议收藏」Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化、容器是完全使用沙箱机制,彼此之间没有任何接口。一个完整的Docker有以下几个部分组成:DockerClient客户端Docker守护进程守护进程Docker镜像镜像Docker容器容器下面是Docker的常用命令:Docker常用命令大全容器生命周期管理命令runstart/stop/restart

    2022年9月18日
    3
  • shiro面试题「建议收藏」

    shiro面试题「建议收藏」1、什么是ShiroApacheShiro是Java 的一个安全(权限)框架。Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以完成:认证、授权、加密、会话管理、与Web集成、缓存等。2、描述Shiro认证流程1、收集用户身份/凭证2、调用Subject.login进行登录3、创建自定义的R…

    2022年10月15日
    2
  • 小微型库(3.绑定on和解绑off)

    小微型库(3.绑定on和解绑off)小微型库(3.绑定on和解绑off)

    2022年4月20日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号