关于函数传参类型问题的思考与自我解答

在创建变量时,例如int a
我们在执行代码

int a;
&a+1

当进行这样的操作时,a的地址会自动加4,代码执行时,会自动识别a为int类型,在转换成汇编的时候,就有类似jump四个字节的操作。
当遇到代码:

int test[int arr[]];

就想到为什么传参还要强调类型呢?
参数的类型是为了进行一位操作时要跳跃的地址
例如

int test[int arr[]]
{
	arr + 1}

传入的是arr的首地址,加一操作,就会跳跃四个字节。
如果把代码换成

int test[char arr[]]
{
	arr + 1}

加一操作,就会跳跃一个字节。
所以不论arr数组元素本身是int还是char都无所谓,进行加一操作都是取决于形参本身。
回到原来的问题:为什么传参还要强调类型呢?
为了知道进行一位操作要跳几个字节吗?
那么为什么不定义一个通用的类型呢,当我们想对数组本身进行操作时,例如int型数组,我们就要跳四个字节操作,就由编译器转汇编的时候自己识别是int型,因为在定义一个整形的时候就能自己识别要跳一个整形的大小,想进行其他类型操作时,例如char型数组,我们想进行跳四个字节操作就进行强转。这样设计就会把规则设计的更加通用,更加方便。
当然有(void*)型,但是这个无法自己识别,每次都要强转。在思考这个问题的时候就在想为什么没有把(void*)设计成上面所说的那种操作。
后来经过和学长的讨论得到一些自己感觉解释的通的结论:

1.如果那样设计的话,在每次执行自己定义的时候,底层或者汇编上面都会有一个识别的过程,会降低代码执行的速度,而且当函数不仅仅是那些简单的指针,例如出现结构体或着一些更复杂的,汇编上可以只有几句话,但是编译器要进行很大的修改。
2.C语言,毕竟C生万物,C语言更讲求速度,目前的设计,代码执行更快,让程序员自己写要怎么操作,让编译器省去判断的步骤,代码执行更快,虽然程序员要自己多写几句。但C语言更讲求代码效率。听说python就是自己识别,但是执行速度不够快。但目前还没有学习python。
3.C语言目前的规则就是这样,传参只是传一个地址,并没有传地址所存变量的类型,对地址如何操作由程序员决定。感觉这样解释确实可以,这样就不需要代码执行的时候加判断步骤了,我们要怎么操作就自己写,无非就是多了程序员多了一步,而且不必拘泥于传参的原来的类型,权限更高,代码执行更简单。

这些都是目前的猜测,可能随着学习的深入,会改变目前的理解。如果有大佬看见,希望可以指点一二。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值