C语言中数组名用作函数参数是否可以做自增操作

我们知道数组名是一个常量,不能够做修改操作,但是在实际中,发现数组名做参数的时候却做了自增操作,为此专门写了个简单代码测试了一下

1、首先模拟一下数组名自增时报错的情况

源码:

报错:

结论:如果对数组名进行了赋值操作就会报lvalue required as increment operand,意思是对左值进行了增加操作

2、模拟一下数组名作参数时,不报错的情况

源码:

编译日志:

结论:

①实参数组名代表该数组首元素的地址,而形参是用来接收从实参传递过来的数组首元素地址的。因此,形参应该是一个指针变量(只有指针变量才能存放地址)。实际上,C编译都是将形参数组名作为指针变量来处理的。

新的疑问1:如果将数组名作为形参时是将数组名作为指针变量来处理,为什么不直接将形参携程数组指针变量的形式?

比如:原数组char * arr[];

形参应该为:(char *)(*array)[];

新的疑问2:arr++不会越界吗

在 C 语言中,`char *arr[]={"abc", "abcd", "abcde"};` 这个定义声明了一个指向字符指针的数组(也称为字符串数组,尽管这里并没有显式的 `char` 数组,但字符串字面量在 C 中实际上是由指向它们首字符的指针表示的)。

这里,`arr` 是一个数组,它包含三个元素,每个元素都是一个 `char*` 类型的指针。这三个指针分别指向字符串字面量 `"abc"`、`"abcd"` 和 `"abcde"` 的首字符。因此,这个数组里存储的是指向字符串字面量的指针(即地址)。

具体来说:

* `arr[0]` 是一个指向字符串 `"abc"` 的首字符 `'a'` 的指针。
* `arr[1]` 是一个指向字符串 `"abcd"` 的首字符 `'a'` 的指针。
* `arr[2]` 是一个指向字符串 `"abcde"` 的首字符 `'a'` 的指针。

这些字符串字面量通常存储在程序的只读数据段(read-only data segment)中,所以你不应该尝试修改它们的内容(尽管有些编译器和平台可能允许你这么做,但这是未定义的行为)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值