c语言小问题

Hans-123 2020-08-25 11:26:07
#include<stdio.h>

void free(int i)
{
if(i!=0)
i=0;
}

int main()
{
int i,a[5]={1,2,3,4,5};
free(a[2]);
i=a[2];
printf("%d\n",i);
}

结果是3,为什么不是0呢?是不是形参和实参的知识?
...全文
264 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
故我ヾ 2020-09-23
  • 打赏
  • 举报
回复
你这个是值传递,形参的改变不会影响实参的值,所以它还是3
ctrigger 2020-09-16
  • 打赏
  • 举报
回复
用C++吧。直接用引用即可。。其他不要动。。。

void free(int &m)
{
if(m!=0)
m=0;
}
zhangevolxuan 2020-09-11
  • 打赏
  • 举报
回复
void free(int i) { if(i!=0) i=0; }函数调用完,变量i声明周期也就结束了,因为i是栈内存的变量,所以使用完之后也就是未知啦,
zhangevolxuan 2020-09-11
  • 打赏
  • 举报
回复
https://blog.csdn.net/yinzewen123/article/details/80532886?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159920883319725222423450%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=159920883319725222423450&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v3-3-80532886.pc_ecpm_v3_pc_rank_v3&utm_term=%E5%87%BD%E6%95%B0%E4%B8%8D%E8%83%BD%E8%BF%94%E5%9B%9E%E6%A0%88%E5%8F%98%E9%87%8F%E7%9A%84%E6%8C%87%E9%92%88&spm=1018.2118.3001.4187 你可以看一下这个链接,最根本的应该是栈内存的原因
自信男孩 2020-08-25
  • 打赏
  • 举报
回复
因为i是free函数里的局部变量,而非全局或main函数里的变量。局部变量不能把i=0的值传到main函数里。
qybao 2020-08-25
  • 打赏
  • 举报
回复
也可以说是形参实参的知识(形参只是实参的拷贝),还涉及传值和传地址的知识
自信男孩 2020-08-25
  • 打赏
  • 举报
回复
引用 4 楼 Hans-123 的回复:
[quote=引用 2 楼 自信男孩的回复:]因为i是free函数里的局部变量,而非全局或main函数里的变量。局部变量不能把i=0的值传到main函数里。

那如果是这样呢?
#include<stdio.h>

void free(int m)
{
  if(m!=0)
  m=0;
}

int main()
{
int i,a[5]={1,2,3,4,5};
free(a[2]);
i=a[2];
printf("%d\n",i);
}[/quote]
一样的,free里的m已经不是main里的m了,free里的形参m是free函数里的局部变量,但是可以这样做:

void free(int *m)
{
if(*m!=0)
*m=0;
}

这样定义free就可以了,即传实参的地址到free里。
Hans-123 2020-08-25
  • 打赏
  • 举报
回复
引用 2 楼 自信男孩的回复:
因为i是free函数里的局部变量,而非全局或main函数里的变量。局部变量不能把i=0的值传到main函数里。
那如果是这样呢? #include<stdio.h> void free(int m) {   if(m!=0)   m=0; } int main() { int i,a[5]={1,2,3,4,5}; free(a[2]); i=a[2]; printf("%d\n",i); }
硬件拾遗 2020-08-25
  • 打赏
  • 举报
回复
1楼说的有道理,这是值传递还是地址传递的问题,可以改成
void free(int *p)
{
if (*p != 0) {
*p = 0;
}
}

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧