以下代码片段在Turbo C++编译器中提供了意外输出:
char a[]={'a','b','c'};
printf("%s",a);
Run Code Online (Sandbox Code Playgroud)
为什么不打印abc?根据我的理解,字符串在C中实现为一维字符数组.
其次,字符串%s和%2s?之间的区别是什么?
据我所知,数组名称就像指向第一个元素的指针.但是:
int c[]={0,1,2};
printf("%d \t %d",c,&c[0]); //Different values,Why?
Run Code Online (Sandbox Code Playgroud)
还有为什么*c=0呢?
众所周知,局部变量具有局部范围和寿命.请考虑以下代码:
int* abc()
{
int m;
return(&m);
}
void main()
{
int* p=abc();
*p=32;
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个函数返回局部变量地址的警告.我认为这是理由:一旦abc()完成,就会释放本地可验证的m.所以我们在主函数中解除引用无效的内存位置.
但是,请考虑以下代码:
int* abc()
{
int m;
return(&m);
int p=9;
}
void main()
{
int* p=abc();
*p=32;
}
Run Code Online (Sandbox Code Playgroud)
我在这里得到同样的警告.但我想m返回时仍会保留其生命周期.怎么了?请解释错误.我的理由是错的吗?