这是我在学习期间发现的:

#include<iostream>
using namespace std;
int dis(char a[1])
{
    int length = strlen(a);
    char c = a[2];
    return length;
}
int main()
{
    char b[4] = "abc";
    int c = dis(b);
    cout << c;
    return 0;
}  

所以在变量int dis(char a[1])中,[1]似乎什么都不做,在

我想知道的是为什么编译器允许这种行为(int a[1]).或者它还有其他我不知道的意思?

推荐答案

这是将数组传递给函数的语法的一种奇特之处.

实际上,在C语言中传递数组是不可能的.如果编写的语法看起来应该传递数组,那么实际发生的情况是传递指向数组第一个元素的指针.

由于指针不包含任何长度信息,函数形式参数列表中[]的内容实际上被忽略.

允许这种语法的决定是在20世纪70年代做出的,从那时起就造成了很多混乱...

C++相关问答推荐

带双指针的2D数组

为什么这个C程序代码会产生以下结果?

如何判断宏参数是否为C语言中的整型文字

通过管道将一个子系统的标准输出发送到另一个子系统的标准输出

编译的时候g++通常会比GCC慢很多吗?

如何使用低级C++写出数值

cairo 剪辑区域是否存在多个矩形?

在libwget中启用Cookie会导致分段故障

-Wnonnull-Compare警告不是具有误导性吗?

C:如何将此代码转换为与数组一起使用?

为什么GCC-O1优化破解了这个代码,为了一个GameBoy高级只读存储器而修改了VRAM的循环?

如何摆脱-WIMPLICIT-Function-声明

从另一个宏函数调用C宏

Fscanf打印除退出C代码为1的程序外的所有内容

程序对大输入给出错误答案

使用mmap为N整数分配内存

在哪里可以找到叮当返回码的含义?

访问未对齐联合的成员是否为未定义行为,即使被访问的成员已充分对齐?

C 语言中 CORDIC 对数的问题

使用替代日历打印日期