C语言零碎知识点总结(数组和函数返回值)

数组:

数组的下标只能是无符号整形,可以是常量或者常量表达式,并且是在编译之前转换可以装换成常量或者常量表达式也可以。

int  a[3-1];//常量表达式,可以

int a[3.1-1.1];//3.1-1.1为2.0,不可以

int a["a"];//"a"是字符常量,不可以

关于返回值:

int a = 10;
return a;

int a[10] = {hello};
return a;

int *a = "hello";
return a;

首先要知道子函数 静态申请的空间都在栈上,在函数调用时分配内存空间,在函数调用完毕时候释放空间。在返回a的时候是把a的值存放到了一个寄存器中,我们在父函数中1取得的是这个寄存器中的值,所以第一个语句返回一个int类型的数,我们就可以正常的收到该值。

第二个return关于返回一个栈地址:将栈的地址作为函数返回值是不会报任何错误,但是我们不能得到到该数组的有效元素值,但是可以访问该空间,因为栈上的空间谁都可以访问,所以此时这段大小为10的栈上的空间可能已经被别的函数使用,是不安全的。

第三个return返回非栈空间,没有被释放,可以被主函数正确访问得到想要的数据。

总结:静态数组的子函数中申请的空间位于栈上,在函数运行完就释放,所以将数组名作为返回值是不能得到原来数组的元素,可以返回堆首地址,不能返回栈首地址。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值