假设我有两个文件:file1.c-包含一个名为"array [10]"的大小为10的int数组的全局定义.file2.c-包含一个名为"extern int*array"的int指针,这里我试图将这个指针链接到数组.
但是当我检查file1.c中的数组地址和file2.c中的指针值时,它们都是不同的.为什么会这样?
可能重复:
数组名是C中的指针吗?
假设我有一个char数组说arr和arr将代表第一个元素的地址,所以arr ++应该是完全合法的,那么为什么编译器会说'左值'.
如果我这样做:arr = arr + 1那么为什么它是无效的转换.我只是一个一个地增加指针.编译器告诉LHS操作数类型是char [4],但在RHS上它是char*.
main()
{
char arr[]={'a','b','c','d'};
for(;arr!=arr+4;arr++) //lvalue required
printf("%c",*arr);
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
C++:隐藏规则背后的基本原理
假设我有一个代码:
class A
{
public:
void f(int s) {}
};
class B:public A
{
public:
void f() {}
};
int main()
{ B ob;
ob.f(4);
}
Run Code Online (Sandbox Code Playgroud)
然后在这种情况下,编译器会生成一个错误"没有匹配函数来调用'B :: f(int)'"但是B类继承了A作为公共,因此B必须具有函数"void f(int s)".不知道为什么编译器在这里产生错误?