惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
T
Threat Research - Cisco Blogs
H
Hacker News: Front Page
N
News and Events Feed by Topic
Know Your Adversary
Know Your Adversary
Cisco Talos Blog
Cisco Talos Blog
SecWiki News
SecWiki News
C
Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tor Project blog
K
Kaspersky official blog
Forbes - Security
Forbes - Security
Webroot Blog
Webroot Blog
Schneier on Security
Schneier on Security
P
Privacy & Cybersecurity Law Blog
H
Heimdal Security Blog
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
V
Vulnerabilities – Threatpost
T
Tenable Blog
T
Tailwind CSS Blog
P
Privacy International News Feed
WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
博客园 - Franky
Hacker News: Ask HN
Hacker News: Ask HN
Jina AI
Jina AI
C
Cybersecurity and Infrastructure Security Agency CISA
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
雷峰网
雷峰网
Vercel News
Vercel News
A
About on SuperTechFans
爱范儿
爱范儿
Simon Willison's Weblog
Simon Willison's Weblog
AWS News Blog
AWS News Blog
The Last Watchdog
The Last Watchdog
Engineering at Meta
Engineering at Meta
Spread Privacy
Spread Privacy
Security Archives - TechRepublic
Security Archives - TechRepublic
博客园 - 司徒正美
量子位
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
Hacker News - Newest:
Hacker News - Newest: "LLM"
Recorded Future
Recorded Future
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Martin Fowler
Martin Fowler
Project Zero
Project Zero

博客园 - 撬棍

【.Net】2、8、16进制转换 【.Net】执行CMD命令 【.Net】获取随机数函数 【.Net】注册程序开机启动 【.Net】把窗体“钉”到桌面上 【.Net】多语言查看MSDN 【.Net】 显示星期字符串 【.Net】 判断时间字符串正确性 【.Net】 实现窗口拖动 【.Net】 Winform 单例运行实例 [C++]函数返回值 [C++]数组参数 [C++]const的指针使用 [VBA]Excel输出utf-8编码格式文件 使用WideCharToMultiByte 【C++】split [C语言学习]之打印万年历 - 撬棍 - 博客园 [VB6.0]让程序在任务列表和资源管理器“隐身” [InstallShield]FindAllFiles与SetFileInfo配合实现文件加多文件属性设置 [VB]修改注册表让程序开机自动运行 - 撬棍 - 博客园
[C++]指针类型出参
撬棍 · 2013-03-19 · via 博客园 - 撬棍

1.以下函数无法将指针出参带出,因为修改的只是pi形参的值,实参值(main::pi)没有被修改,和传入一个int型原则上是没有区别的。

int val = 10;
void foobar( int *pi ) 
{
    pi = &val;
    return;
}

void main()
{
    int *pi = 0;
    foobar(pi);
    if (pi == 0)
    {
        std::cout << "pi is NULL.";
    }
    else
    {
        std::cout << "pi is:" << *pi;
    }
    return;
}

pi is NULL.请按任意键继续. . . 

2、方法可以是传入指针的引用,此时并没有创建形参pi,直接使用实参,和传入一个int型引用原则上是没有区别的。

int val = 10;
void foobar(int *&pi) 
{
    pi = &val;
    return;
}

void main()
{
    int *pi = 0;
    foobar(pi);
    if (pi == 0)
    {
        std::cout << "pi is NULL.";
    }
    else
    {
        std::cout << "pi is:" << pi;
    }
    return ;
}

pi is:00412004请按任意键继续. . .

3、传入指针的指针,这个稍稍有些难理解,修改的是传入的指针的指向指针的值,所有可以带出。

int val = 10;
void foobar(int **ppi) 
{
    *ppi = &val;
    return;
}

void main()
{
    int *pi = 0;
    int **ppi = &pi;
    foobar(ppi);
    if (*ppi == 0)
    {
        std::cout << "pi is NULL.";
    }
    else
    {
        std::cout << "pi is:" << *ppi;
    }
    return ;
}

pi is:00412004请按任意键继续. . .