请选择 进入手机版 | 继续访问电脑版

三种方法:写一个函数,每调用一次函数,就会将num的值增加1,&&可能遇到

[复制链接]
钟启航 发表于 2021-1-1 18:28:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
写一个函数,每调用一次函数,就会将num的值增加1,以及大概遇到的问题

1.传址
  1. int AddNumAddress(int *p){        return ++(*p);}int main(){        int num = 1;        int arr1=AddNumAddress(&num);        int arr2 = AddNumAddress(&num);                printf("%d  %d\n", arr1, arr2);        system("pause");        return 0;}
复制代码
2.全局变量
  1. int num = 1;int AddNum(){                return ++num;}int main(){        int arr1=AddNum();        int arr2 = AddNum();        printf("%d  %d\n", arr1, arr2);        system("pause");        return 0;}
复制代码
3.static修饰变量
  1. int AddNum(){        static int num = 1;        return ++num;}int main(){        int arr1=AddNum();        int arr2 = AddNum();        printf("%d  %d\n", arr1, arr2);        system("pause");        return 0;}
复制代码
两种错误写法:
  错误写法一:
  1. int AddNum(int num){        return ++num;}int main(){        static int num = 1;        int arr1=AddNum(num);        int arr2 = AddNum(num);        printf("%d  %d\n", arr1, arr2);        system("pause");        return 0;}
复制代码
错误原因:
  函数调用,形参会实例化,形参是实参的一份临时拷贝,函数中的num和主函数中的num此时不是一个变量,所以对函数使用的形参num,每调用一次,主函数的num并不会递增。
错误写法二:
  1. int num = 1;int AddNum(int num){                return ++num;}int main(){        int arr1=AddNum(num);        int arr2 = AddNum(num);        printf("%d  %d\n", arr1, arr2);        system("pause");        return 0;}
复制代码
错误原因,
  创建并初始化num为全局变量,在主函数中作为实参传给函数,此时函数调用会发生形参实例化,形参对实参拷贝,此时函数内里的num和全局变量num并没有直接关系,函数中对num++,并不会影响全局num的值,所以导致每调用一次1,num并不会递增。
  以上两个问题是我遇到的问题,不知道各人有和我一样的嘛,写出来供各人参考,欢迎提问。

来源:https://blog.csdn.net/shuangweiyebai/article/details/112056732
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )