【发布时间】:2020-01-07 19:59:05
【问题描述】:
我正在为考试而学习,然后我在网上看到了这个。我的问题是,数组不是基本上是 c 中的常量指针(所以出现错误)?起初我想得到一个关于这个“b+=2”的错误,但没有。
int func ( int b[])
{
b +=2;
printf("%d",*b);
}
int main()
{
int arr[]={1,2,3,4};
func(arr);
return 0;
}
(这个程序的输出是 3 btw)
【问题讨论】:
-
作为参数使用时
int b[]表示int *b。它不是一个数组。 (sizeof(b)甚至会返回sizeof(int*)。) -
用
b += 2你只需将b中的地址值从数组的第一个元素更改为第三个元素3,所以代码是合法的并且没有错误 -
提示:您应该将
void用于不返回任何内容的函数。你有未定义的行为。 -
数组不是“基本的常量指针”,这是一个常见的误解。您可以获取数组或其元素的地址,就像任何变量一样
-
今天可能会这样。你确定吗。你眨眼了吗?下次运行该程序时它可能无法正常工作。好吧,如果它是未定义的行为,但 M.M 说它不在 C 中。无论哪种方式,它都会让你的读者感到困惑,并发出警告。 (您正在启用和标题警告,对吧?)