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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Golang语言空白符

    Golang语言空白符空白符 blankidentif 空白符的产生可能是因为 go 不允许变量声明了但不使用 既然不想使用 何必声明变量呢 那就将变量用空白符代替 反正空白符就是用来抛弃的 1 空白符用来匹配一些不需要的值 然后丢弃掉 下面的 blank identifier go 就是很好的例子 ThreeValues nbsp 是拥有三个返回值的不需要任何参数的函数 在下面的例子中 我们将第

    2025年11月20日
    9
  • linux 查看目录大小_shell判断文件大小

    linux 查看目录大小_shell判断文件大小du[-abcDhHklmsSx][-L][-X][–block-size][–exclude=][–max-depth=][–help][–version][目录或文件]常用参数:-a或-all为每个指定文件显示磁盘使用情况,或者为目录中每个文件显示各自磁盘使用情况。-b或-bytes显示目录或文件大小时,以byte为单位。-c或–tota…

    2022年10月12日
    2
  • canoe入门教程_简易手工制作

    canoe入门教程_简易手工制作转载自http://blog.michiru.me/posts/canoe-tutoiral-part-1.html简介CANoe是什么如果你和我一样接触了点车辆电子开发的话,你可能会听说过CANoe。CANoe是德国VectorInformatik出品的开发软件,主要用于主机厂(OEMs),或者ECU供应商进行CAN网络,或者CAN相关ECU的开发、分析、仿真、测试和

    2025年7月16日
    3
  • Qt面试笔试题问答经验总结

    Qt面试笔试题问答经验总结相信很多人和我一样,虽然经常用qt做些东西,但其实对qt理解并不是很深,尤其在岗位有相关需要的时候也会遇到很多坑。感觉网上也比较少,所以根据个人的面试经验,总结了一些面试qt的问题。答案为我自己的理解总结,有问题还请大佬指出。1.为什么要用qt来做界面Qt的跨平台性很强,比如同样一套代码写好pro文件可以在windows/linux/Android等直接编译。2.信号槽机制在事件的处理方面…

    2022年6月25日
    157
  • 什么叫侧面指纹识别_前面侧面还是背面?手机指纹识别放哪儿合适

    什么叫侧面指纹识别_前面侧面还是背面?手机指纹识别放哪儿合适自指纹识别功能在智能手机上逐渐被普及之后,被安卓厂商们所抛弃的实体按键又一次回到了手机上。不过与之前不同,这次实体按键并不一定要承载Home键的功能,因此指纹识别的位置也被各个手机厂商玩出了花样,传统一点的将其放在手机的正面,大胆一点的则将指纹识别按键放在机身背面,也有个别厂商为避免前后面板开孔,将指纹识别放在了机身的侧边。那么指纹识别究竟放在哪里更合适呢?目前,在苹果的“号召”下,大部分手机厂商…

    2022年6月16日
    168
  • android换机备份,安卓手机备份迁移指南

    android换机备份,安卓手机备份迁移指南原标题:安卓手机备份迁移指南买了新手机,本来是一件非常开心的事情,但是如何将旧手机上的有用信息转移到新手机上,这可是一件让大家很犯愁的事情,今天就跟着小编一起来看看安卓手机的四种转移数据的方法吧。1、一键换机现在很多的手机都有一键换机的功能,能直接将旧手机上的所有数据转移到新手机上,非常的方便。下面我们用小米手机来看看具体的换机操作。首先在小米手机“设置—更多设置”中,找到“一键换机”功能。然后…

    2022年5月22日
    74

发表回复

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

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