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


相关推荐

  • java验证电话号码的正则_java使用正则表达式判断电话号码

    java验证电话号码的正则_java使用正则表达式判断电话号码Iwanttohavephonenumberinworkingcombinationof’0’followedby10digitmobilenumber(or)0091folllowedby10digitmobilenumber(or)+91followedby10digitnumber.1)0followedand+91fo…

    2022年9月17日
    2
  • 通俗易懂的双亲委派机制

    通俗易懂的双亲委派机制你得先知道在介绍双亲委派机制的时候,不得不提ClassLoader。说ClassLoader之前,我们得先了解下Java的基本知识。Java是运行在Java的虚拟机(JVM)中的,但是它是怎么就运行在JVM中了呢?我们在IDE中编写的Java源代码被编译器编译成.class的字节码文件。然后由我们得ClassLoader负责将这些class问价加载到JVM中去执行。JVM中…

    2022年5月24日
    33
  • django filter查询_搜索全局排序方法

    django filter查询_搜索全局排序方法前言当我们需要对后台的数据进行过滤的时候,drf有两种,搜索过滤和排序过滤。搜索过滤:比如我们想返回sex=1的,那么我们就可以从所有数据中进行筛选排序过滤:比如我们想对价格进行升序排列,就可以

    2022年7月31日
    6
  • 2021年前端面试题及答案

    前端面试汇总(2020年)一大纲1、前言2、前端工程化3、前端设计模式4、前端安全性问题5、前端跨域问题6、前端数据加密7、前端http相关问题8、*前端基础知识点面试题9、前端技术栈问题前言由于新冠肺炎疫情,现在成天呆在家里,加上也要准备面试,就在家里看面试题…

    2022年4月6日
    52
  • BAT机器学习面试1000题系列(第1~305题)

    BAT机器学习面试1000题系列整理:July、元超、立娜、德伟、贾茹、王剑、AntZ、孟莹等众人。本系列大部分题目来源于公开网络,取之分享,用之分享,且在撰写答案过程中若引用他人解析则必注明原作者及来源链接。另,不少答案得到寒小阳、管博士、张雨石、王赟、褚博士等七月在线名师审校。说明:本系列作为国内首个AI题库,首发于七月在线实验室公众号上:julyedulab,并部分更新…

    2022年4月6日
    31
  • mbus总线是什么意思_Can总线如何配置500k波特率

    mbus总线是什么意思_Can总线如何配置500k波特率MBus总线上自动波特率识别1、通过前导字节0x68,捕获引脚通过1、0比特的两个上升沿的差值除以2来自动识别出波特率。2、为什么是通过两个上升沿,而不是一个上升沿一个下降沿,比如两个比特11的长度除以2来计算?因为两条平行的MBUS总线间存在电容效应,在实验室里面由于线比较短,不容易测试出来,但在实际产品使用中是真实存在的,因此在实验室里面分别用10nf、47nf、23n…

    2022年10月8日
    2

发表回复

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

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