搜索
bottom↓
回复: 25

新同事的面试题: 关于 形参直接进行运算与否

[复制链接]

出1310入193汤圆

发表于 2021-4-3 15:15:23 | 显示全部楼层 |阅读模式
原题目是:C语言中在函数内部什么时候需要定义局部变量代替形参进行运算,什么时候直接用形参进行运算?

曾经,某公司的面试官给的题目, 他自己拿不准,丢分啦
各位坛友有正确的答案吗

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出300入477汤圆

发表于 2021-4-3 15:22:41 | 显示全部楼层
如果形参是数组(也就是指针),为了在修改的时候不破坏原来的内容,就需要复制到另一个局部变量里面修改。非指针的形参在函数内部随便修改无所谓,并不影响调用者。

出110入93汤圆

发表于 2021-4-3 15:46:01 | 显示全部楼层
传值和传地址的区别吧。出题目是个高难度动作,描述要清晰不多义,传达明确的考查意图。

出0入8汤圆

发表于 2021-4-3 15:53:34 来自手机 | 显示全部楼层
我赌一万块钱,C语言的发明者做不对这道题

出0入36汤圆

发表于 2021-4-3 16:58:11 来自手机 | 显示全部楼层
做这玩意有啥一样,面向搜索引擎的编程不香么

出1310入193汤圆

 楼主| 发表于 2021-4-3 17:00:45 | 显示全部楼层
redroof 发表于 2021-4-3 15:22
如果形参是数组(也就是指针),为了在修改的时候不破坏原来的内容,就需要复制到另一个局部变量里面修改。非 ...

这是100分的答案  面试者要的回答

出280入168汤圆

发表于 2021-4-3 17:25:48 来自手机 | 显示全部楼层
形参是啥都忘了,我最近还在用 C 写 51 模拟器呢……

出200入2554汤圆

发表于 2021-4-3 17:31:23 | 显示全部楼层
这样追求标准答案的公司,不去也罢。

在我看来严格意义的 “C直接用形参进行运算” ,除了形参被 const 限定的情况外,都可以进行,原因如下:

a. 在标准 C 定义了,形参的传值是单向的,不应该反向影响调用方;

b. 形参作为指针可以参与运算,而 “修改指向地址的内容” 已经超出了形参运算的范畴,不符合题目设定;

c. 引用式形参,可以反向影响调用方,但属于 C++ 已经超出了标注 C 的范畴,不符合题目设定;

d. 函数原型设定不清,没有严格写明 const 限定,导致调用方、背调方相互猜疑,
  实则调用方应考虑到最大影响(全部改写),被调方应考虑最小影响(全不改写),这样方能最安全耦合。
  结果这两方对于本题的答案是意见必然相反,因而题目如若追求唯一标准答案的话,应该区分这两方立场。

出300入477汤圆

发表于 2021-4-3 17:49:15 来自手机 | 显示全部楼层
t3486784401 发表于 2021-4-3 17:31
这样追求标准答案的公司,不去也罢。

在我看来严格意义的 “C直接用形参进行运算” ,除了形参被 const 限 ...

对正规写库的人来说,是这样的。
声明了不带const的指针参数,就已经表示你要修改它指向的内容。如果你不修改指向内容就应该明确声明为const。
但如果写库的人不够正规,或者是业务代码而不是库代码,没那么多讲究,那么不带const的指针参数会不会被修改就是不保证的。哈哈,自看着办吧,看不见就用最保守的做法

出0入25汤圆

发表于 2021-4-3 17:55:59 | 显示全部楼层
考这种问题没有意义。
真要找人,有实战经验和独立项目能力更重要。

出0入0汤圆

发表于 2021-4-3 18:00:24 来自手机 | 显示全部楼层
区别形参与实参,唯一目的是为了考试,实际使用中从来不知道这有什么意义

出280入168汤圆

发表于 2021-4-3 18:00:46 来自手机 | 显示全部楼层
这玩意儿真不好说,我现在连 c 运算符的优先级都不记得了,通通加括号,反正硬盘够大,电脑 CPU 够快,事儿解决了就行。

出0入79汤圆

发表于 2021-4-3 18:37:00 来自手机 | 显示全部楼层
本帖最后由 motor_control 于 2021-4-3 18:40 编辑

如何解决实际问题才是最重要的。
当然必须得有扎实的基础,不然做啥也不行。
这种问题适合象牙塔里的人夸夸其谈,都是在谈论工具,却始终不去解决各种各样实际的问题,就和用各种芯片点流水灯一样。

出1310入193汤圆

 楼主| 发表于 2021-4-3 20:30:28 | 显示全部楼层
论坛的大牛如云哦   从回帖中就可以看出

出0入0汤圆

发表于 2021-4-3 20:45:10 | 显示全部楼层
C语言中在函数内部什么时候需要定义局部变量代替形参进行运算,什么时候直接用形参进行运算?

前者是传指针,后者是传值

出0入0汤圆

发表于 2021-4-4 12:15:50 | 显示全部楼层
这种适合考试比较适合,实际做项目没必要吧  ,,一般面试 你给他弄2个简单的项目,看看能不能做出来就行了,通过他做过的来评估就好了。不能做项目,天花乱坠都没用

出100入101汤圆

发表于 2021-4-4 12:42:13 来自手机 | 显示全部楼层
8楼,赞同

出0入4汤圆

发表于 2021-4-4 13:21:49 | 显示全部楼层
如果我出题则考核算法,或者链表之类的实际应用,才有意义。
反过来,从面试者出的题可以看出面试者的水平  

出5入14汤圆

发表于 2021-4-6 15:46:43 | 显示全部楼层
用C语言写单片机程序N年了,看到“形参”愣了一下,已经忘记这东西跟“实参”的区别了

出0入59汤圆

发表于 2021-4-6 16:18:55 | 显示全部楼层
OS_SEM_CTR  OSSemPend (OS_SEM   *p_sem,
                       OS_TICK   timeout,
                       OS_OPT    opt,
                       CPU_TS   *p_ts,
                       OS_ERR   *p_err)

这个是ucos的信号量peng函数, OS_ERR   指针指向的内容, 就是被函数内部更改的;

所以形参指针的数据不参与函数运算这说法也不一定靠谱;

linux 内核这些写法到处都是,

正如楼上说的 “这种问题适合象牙塔里的人夸夸其谈,都是在谈论工具,却始终不去解决各种各样实际的问题,”


出300入477汤圆

发表于 2021-4-6 22:05:03 来自手机 | 显示全部楼层
polarbear 发表于 2021-4-6 16:18
OS_SEM_CTR  OSSemPend (OS_SEM   *p_sem,
                       OS_TICK   timeout,
                   ...

对于很正规的库来说,函数声明里的指针没带const,就是告诉你这个指针指向的内容会被改。如果是他不会改的指针,声明里都带着const呢。
你看标准c库的str系列函数就知道了,比如strcat,一个参数会被改,一个不会,所以会被改的那个就不带const,不改的那个就带

出0入16汤圆

发表于 2021-4-7 09:09:07 | 显示全部楼层
数据类型不同需要重新定义,不然导致数据运算越界

出0入0汤圆

发表于 2021-4-7 09:10:07 | 显示全部楼层
如果形参是一个指针,那么你申请一个局部变量代替他一样可以修改它指向的内容。
所以我认为形参本身就是一个局部变量,找一个局部变量来替换他是没有必要的
只有一种情况我觉得可以替换,就是在函数内部这个形参可以起一个更好的具体的名字时
比如:
void student(u8 para1, u8 para2)
{
    u8 age = para1;
    u8 class = para2;
}

出0入0汤圆

发表于 2021-4-7 09:51:26 | 显示全部楼层
一直没搞清楚形参与实参的区别。  或者说,我理解的形参和实参,不是楼上很多人说的那回事。  我还经常写 C 程序呢,真是惭愧。

出0入93汤圆

发表于 2021-4-7 11:51:20 来自手机 | 显示全部楼层
redroof 发表于 2021-4-6 22:05
对于很正规的库来说,函数声明里的指针没带const,就是告诉你这个指针指向的内容会被改。如果是他不会改 ...

对于指针参数来说,形参到底是这个指针(传值)还是指针指向的内容(感觉好扯)?显然只是指针本身,指针指向的内容修改与否跟形参运算有啥关系。那么就无所谓改不改了,C函数只能传值无法传引用,形参任何时候都可以直接参与运算。

出0入0汤圆

发表于 2021-4-11 00:41:15 | 显示全部楼层
实参和形参,好久远的提法,上一次听说是在十多年前的大学课堂了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 17:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表