int main(int argc, char** argv) {
int i=5;
{
int i=7;
printf("%d\n", i);
}
return 0;
}
如果我想访问i
中的外int i=5
(printf
)值,那该怎么办呢?
答案 0 :(得分:8)
C99标准的相关部分,第6.2.1节(标识符的范围):
4 [...]如果标识符指定同一名称空间中的两个不同实体,则范围可能会重叠。如果是这样,一个实体(内部范围)的范围将是另一个实体(外部范围)范围的严格子集。在内部范围内,标识符指定在内部范围内声明的实体;在外部范围内声明的实体在内部范围内隐藏(并且不可见)。
防止pmg's answer消失:您可以通过在隐藏发生之前声明指向它的指针来访问外部块变量:
int i = 5;
{
int *p = &i;
int i = 7;
printf("%d\n", *p); /* prints "5" */
}
当然,永远不需要提供这样的隐藏变量,而且风格总是不好。
答案 1 :(得分:4)
将外部i
存储在另一个变量中,然后声明内部i
。像 -
int i = 5;
{
int p = i;
int i = 7;
printf("%d\n", p); /* prints "5" */
}
答案 2 :(得分:3)
重命名变量。
答案 3 :(得分:2)
您无法访问它。
答案 4 :(得分:1)
我不明白为什么你不能称呼'我'和'J'。
它们的不同名称允许您选择。
答案 5 :(得分:1)
在定义新i
之前,指向旧{{1}}。 (在http://ideone.com/dobQX演示)
但我最喜欢乔纳森的评论!
答案 6 :(得分:0)
简短的回答:你做不到。它被内部范围中的i
隐藏。