//编写程序输出下列图形: //00001 //00010 //00100 //01000 //10000 #include int main() { int i; for (i=0;i<5;i++) printf("%.5s\n","000010000"+i); return 0; }
同名变量的作用于问题。一般遵循最“近”原则,也就是大括号内定义的会覆盖大括号外定义的
第二个能正确显示。 在花括号括起来的程序段内外有相同名字的变量时,程序段优先使用的是花括号内的变量,第一个程序中在定义括号内的a前用的是括号外的a,而定义括号内的a时使用的是另外的空间,并没有把括号外的a的值进行重置。 第二个虽然正确,但是括号外的a不起作用,最好删了。 强烈建议:在一个变量还在起作用的时候,不要定义同名的变量!
Quote: 引用 4 楼 starytx 的回复: 同名变量的作用于问题。一般遵循最“近”原则,也就是大括号内定义的会覆盖大括号外定义的 覆盖效果之针对于该程序段内部吗?因为我另外做测试发现重新定义的数组只对该内部有用,到外部之后起作用的依然是一开始定义的数组
Quote: 引用 5 楼 zhao4zhong1 的回复: //编写程序输出下列图形: //00001 //00010 //00100 //01000 //10000 #include int main() { int i; for (i=0;i<5;i++) printf("%.5s\n","000010000"+i); return 0; } 赞!!!!可是这是怎么实现的呀 没看懂
char *p = "000010000"; for (i=0;i<5;i++) printf("%.5s\n", p + i);
Quote: 引用 9 楼 u013955671 的回复: Quote: 引用 5 楼 zhao4zhong1 的回复: //编写程序输出下列图形: //00001 //00010 //00100 //01000 //10000 #include int main() { int i; for (i=0;i<5;i++) printf("%.5s\n","000010000"+i); return 0; } 赞!!!!可是这是怎么实现的呀 没看懂 "00001000"也有一个地址,%s都是从字符串指向的地址开始的,上面的程序等价于: char *p = "000010000"; for (i=0;i<5;i++) printf("%.5s\n", p + i);
Quote: 引用 7 楼 u013955671 的回复: Quote: 引用 4 楼 starytx 的回复: 同名变量的作用于问题。一般遵循最“近”原则,也就是大括号内定义的会覆盖大括号外定义的 覆盖效果之针对于该程序段内部吗?因为我另外做测试发现重新定义的数组只对该内部有用,到外部之后起作用的依然是一开始定义的数组 到了外部都超出该变量的作用域了,当然就没他啥事了。
Quote: 引用 3 楼 PDD123 的回复: 第二个能正确显示。 在花括号括起来的程序段内外有相同名字的变量时,程序段优先使用的是花括号内的变量,第一个程序中在定义括号内的a前用的是括号外的a,而定义括号内的a时使用的是另外的空间,并没有把括号外的a的值进行重置。 第二个虽然正确,但是括号外的a不起作用,最好删了。 强烈建议:在一个变量还在起作用的时候,不要定义同名的变量! 你好~程序优先选择花括号内的变量,第一个程序中在定义括号内的a前用的是括号外的a,而定义括号内的a时使用的是另外的空间,并没有把括号外的a的值进行重置。但是为何第二个将它的位置提前就可行,依然是将其放置在括号内部啊
#include int main() { int a = 3; int i =0; for(;i<=a;i++) int b[5] ={2}; printf("%d\n",b); return 0; }