Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >函数返回指针

函数返回指针

作者头像
用户7272142
发布于 2023-10-11 12:58:19
发布于 2023-10-11 12:58:19
26300
代码可运行
举报
文章被收录于专栏:Republic博客Republic博客
运行总次数:0
代码可运行

先写一个例子,运行一下看看

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int add(int a, int b)
{
    printf("a = %d  b = %d\n", &a, &b);
    int c = a + b;
    return c;
}
void print()
{

}
int main()
{
    int b = 5;
    int a = 6;
    printf("a = %d  b = %d\n", &a, &b);
    int res = add(a,b);
    print();
    printf("c=%d", res);
}

c = ? 大部分人会说11 也确实是11 因为是值拷贝 或者传递 返回的c也赋值给了res 这并没有什么难理解的,但如果我们要返回一个指针呢,再看一个例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int *add(int *a, int *b)
{
    printf("a = %d  b = %d\n", &a, &b);
     int c = (*a) + (*b);
    return &c;
}
void print()
{
    printf("hello world\n");
}
int main()
{
    int b = 5;
    int a = 6;
    printf("a = %d  b = %d\n", &a, &b);
    int *res = add(&a,&b);
    print();
    printf("c = %d", *res);
}

这时候的运行如果给res解引用的话是多少? 是一个不确定的值 可能是11也可能是一个垃圾值 在我的笔记本上运行的是11

看着运行没有错误是吧。但其实这是偶然性的结果,看图

我们在运行程序时,会先执行main函数 然后调用add函数 这时候main在堆栈就会暂停 将add压入堆栈 执行完add函数 add函数在堆栈中的数据 会被清空 也就是说我们返回的&c会被系统清空 而res是&c,所以解引用res就会出现错误.至于为什么我的结果依旧正确,可能是我写的函数没有占用到那块内存。 如果我把print函数写成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
int *add(int *a, int *b)
{
    printf("a = %d  b = %d\n", &a, &b);
     int c = (*a) + (*b);
    return &c;
}
void print(int k,int y)
{
    int x = 1;
    printf("hello world\n");
}
int main()
{
    int b = 5;
    int a = 6;
    printf("a = %d  b = %d\n", &a, &b);
    int *res = add(&a,&b);
    print(b,a);
    printf("c = %d", *res);
}

得到的结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C语言的灵魂——指针
相关视频——强烈推荐【强烈推荐】4小时彻底掌握C指针 - 顶尖程序员图文讲解 - UP主亲自翻译校对 (已完结)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
半生瓜的blog
2023/05/12
9840
C语言的灵魂——指针
【C语言】指针进阶:字符指针&&数组指针&&函数指针
✨作者:@平凡的人1 ✨专栏:《C语言从0到1》 ✨一句话:凡是过往,皆为序章 ✨说明: 过去无可挽回, 未来可以改变 ---- 🌹感谢您的点赞与关注,同时欢迎各位有空来访我的🍁平凡舍 ---- 文章目录 @[toc] 🚀前言 🚀字符指针 🚀指针数组 🚀数组指针 🍁&数组名 与 数组名 🍁数组指针的使用 🚀数组传参、指针参数 🍁一维数组传参 🍁二维数组传参 🍁一级指针传参 🍁二级指针传参 🚀函数指针 🚀结语 🚀前言 回想之前,我们学了指针的一些基础👉 指针与结构体 我们知道了指针的概念
平凡的人1
2022/11/15
3.2K0
【C语言】指针进阶:字符指针&&数组指针&&函数指针
C语言指针做函数参数,指针做函数返回类型
有时候我们可以使用函数的返回值来回传数据,在简单的情况下是可以的,但是如果返回值有其它用途(例如返回函数的执行状态量),或者要回传的数据不止一个,返回值就解决不了了,所以要引用上指针来传递。
C语言中文社区
2022/11/08
2.8K0
C语言指针做函数参数,指针做函数返回类型
C语言函数指针基础
本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础。如果你不讨厌事无巨细,请尽情阅读吧。 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具。本文将从C语言函数指针的基础开始介绍,再结合一些简单的用法和关于函数名称和地址的趣闻。在最后,本文给出一种简单的方式来看待函数指针,让你对其用法有一个更清晰的理解。 函数指针和一个简单的函数 我们从一个非常简单的”Hello World“函数入手,来见识一下怎样创建一个函数指针。 1 2 3 4 5
猿人谷
2018/01/17
1.6K0
C语言函数指针基础
深入浅出剖析C语言函数指针与回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
杨源鑫
2019/07/04
2.3K0
深入浅出剖析C语言函数指针与回调函数
【指针合集】全方位理解C语言指针
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的。 所以为了有效的使用内存,就要把内存划分成一个个小的内存单元,每个内存单元的大小都是一个字节。 为了能够有效的访问到内存的每个单元,就要给内存单元进行编号,这些编号被称为内存单元的地址。 在写程序时,创建的变量、数组等都要在内存上开辟空间。 每个内存都有唯一的编号,这个编号也被称为地址 地址 == 编号
Yui_
2024/10/16
2930
【指针合集】全方位理解C语言指针
c语言基础学习06_函数
============================================================================= 涉及到的知识点有:1、C语言库函数、字符输入函数:gets和fgets、字符输出函数:puts和fputs、 求字符串长度函数strlen、字符串追加函数strcat、字符串有限追加函数strncat、字符串比较函数strcmp、 字符串有限比较函数strcmp、字符串拷贝函数strcpy、字符串有限拷贝函数strncpy、 格式化字符串函数sprintf(输出)、格式化字符串函数sscanf(读取输入)、解析一个字符串、 字符串查找字符函数strchr、字符串查找子串函数strstr、字符串分割函数strtok、 atoi函数、atof函数、atol函数、解析一个字符串的高级应用。 2、函数的定义和声明、函数的形式参数(形参)与实际参数(实参)、函数的返回值类型和返回值、 return函数与exit函数(exit更猛,不受位置限制)、自定义一个函数,实现大小写字母的互相转换功能、 自定义一个函数,实现atoi的功能。 3、函数的递归、递归例子:有n个人排成一队、递归例子:将10进制数转化为二进制数、 递归例子:将10进制数转化为16进制、递归例子:菲波那切数列、递归的优点与缺点。 4、多个源代码文件程序如何编译、头文件的使用、解决预编译时会出现多次函数声明问题。 ============================================================================= C语言库函数
黑泽君
2018/10/11
1.4K0
C语言——指针(2)
前面我们已经了解了指针的基本概念以及简单的使用,那么什么问题一定要使用指针解决呢?
用户11352420
2024/11/07
1730
C语言——指针(2)
【C语言】指针进阶
官方解释: C/C++会把常量字符串存储到单独的⼀个内存区域,当几个指针指向同一个字符串的时候,他们实际会指向同一块内存。但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。 分析: 我们可以看到字符串是一样的,为hello world,str1和str2不同,str3和str4相同,我们可以看到str3和str4的char*有const修饰,str1和str2没有,因此我们得出的结论就是:有const修饰的字符串str3和str4,计算机会将其认为是一种字符常量,相同的常量会被计算机存放到同一个地址里,所以二者相同;str1和str2是变量,被存放再不同的地址里边了,所以两者不同(这也优化了底层的运行,其实计算机每一种规则都是为了简化过程,减少资源的浪费)
s-little-monster
2024/06/06
940
【C语言】指针进阶
深度刨析程序中的指针
本质就是把常量字符串hello world的首元素的地址放到了str当中,也就是将常量字符串的首元素h的地址放到str中 练习
Yui_
2024/10/16
840
深度刨析程序中的指针
程序环境和预处理(1)
计算机是能够执行二进制指令的,但是我们写出的C语言代码是文本信息,计算机不能直接理解。
waves浪游
2024/02/25
1170
程序环境和预处理(1)
什么是 字符指针? 数组指针? 函数指针? 函数指针数组?
代码 const char* pstr = “hello world.”; 特别容易让我们以为是把字符串 hello world. 放到字符指针 pstr ⾥了,但是本质是把字符串 hello world. 首字符的地址放到了ps!!tr中。
用户11317877
2024/10/16
1490
什么是 字符指针? 数组指针? 函数指针? 函数指针数组?
[C语言]指针进阶(Pointer to the advanced)
本质:const char * pstr = "hello world";本质是把字符串hello world,首字符的地址放到了pstr中.
IT编程爱好者
2023/04/12
5240
[C语言]指针进阶(Pointer to the advanced)
[C] C指针基础概览
在C语言中,指针不仅可以表示变量的地址,而且还可以存储数组,数组元素,函数,文件设备的地址,C指针的主要特征具体如下:
轻舞飞扬SR
2021/02/24
1.1K0
拿捏指针(一)
指针是一个变量,它存储了指向另一个变量的内存地址。它可以用来间接地访问和修改这个变量的值。每个变量在内存中都有一个唯一的地址,指针通过存储这个地址来引用其他变量。指针可以用于在程序中传递和操作内存地址,从而使程序能够更高效地访问和操作内存中的数据。
秋邱
2024/10/09
1240
拿捏指针(一)
[C语言] 函数实参与形参详解
实参(实际参数)是在函数调用时传递给函数的值或表达式。它们是函数执行所需的具体数据。在调用函数时,实参被放置在函数名后面的括号内,实参可以是变量、常量,或者更复杂的表达式。
DevKevin
2024/10/12
3010
【C语言】⒉万字带你玩转高阶指针『0»1』
🚀write in front🚀 ---- 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家^星级博主~掘金 || InfoQ创作者~周榜34»总榜2815🏅 🆔本文由 謓泽 原创 CSDN首发🙉如需转载还请通知⚠ 📝个人主页:打打酱油desuCSDN博客💬 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:【C】系列_打打酱油desu-CSDN博客[〇~①]🎓
謓泽
2022/12/12
6170
【C语言】⒉万字带你玩转高阶指针『0»1』
函数类的学习
函数学习库函数www.cplusplus.comwww.cppreference.com//从这两个网站可搜索所有的库函数,是一个查询工具IO函数字符串操作函数内存操作函数时间/日期函数数学函数其它库函数//内存操作函数memory set = memsetmemset(void*ptr,int value,size_t num);//把ptr所指向的空间的前num个字节的内容设置成指定的value这个值//例#include<stdio.h>#include<string.h>int main(){
暮云
2022/10/16
3420
【C语言篇】深入探究 C 语言指针:揭开指针变量与地址的神秘面纱
通过指针传递参数可以避免拷贝整个数据结构,从而提高效率。典型应用场景是交换两个变量的值。
学无止尽5
2024/11/29
3130
【C语言篇】深入探究 C 语言指针:揭开指针变量与地址的神秘面纱
指针进阶(C语言)
*pp 通过对 pp 中的地址进行解引用,这样找到的是 p , *pp 其实访问的就是 p .
薄荷冰
2024/01/22
1680
指针进阶(C语言)
相关推荐
C语言的灵魂——指针
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档