字符串数组显示问题
mian()
{
char b[10]={"nlk"};
char *y;
y=b;
printf("%c\n",y);
printf("%s\n",y);
}
编译显示结果:L
nlk
我想问下既然数组名字可以做首地址进行寻址为什么这2个打印出来的效果会不一样呢?
也就是说既然数组名b可以当作地址来用那么我将首地址作为参数传给printf函数根据输出格式的不同
(%c,%s的区别)所出现的显示差别应该仅仅是字符和字符串的差(printf("%c\n",y);输出nprintf("%s\n",y);输出nlk)
但是实际的显示结果是上面的L(这个是不确定的可以是L也可以是其他的)和nlk,谁能帮忙解释一下。
[解决办法]
这样看看:
#include<stdio.h>int main(){ //char b[10]={"nlk"}; char b[10] = "nlk"; char *y; y=b; //printf("%c\n",y); printf("%c\n", *y); printf("%s\n",y); return 0;}
[解决办法]
#include <iostream>#include <string>using namespace std;int main(){ char b[10]={"nlk"}; char *y; y=&b[0]; printf("%c\n",*y); printf("%s\n",y); return 0;}
[解决办法]
char b[10]={"nlk"};
//假设b[0]的地址是0045,此地址有随意性。
char *y;
//y是个指针变量。y在内存中的地址不确定,假设为0001
y=b;
//将b的地址赋给y,即内存地址0001中保存的内容为0045
printf("%c\n",y);
//参数%c的意思是将后面的y当做int类型来处理,并打印出unsigned char。而y的内容是0045,也就是b[0]的地址。所以打印出来是将b[0]的地址转换成unsigned char的字符。而b[0]的地址具有随意性。所以打印出来的任何字符都有可能。
printf("%s\n",y);
//参数%s的意思是将后面的y当做指向字符类型的指针,而y的内容是0045。所以打印出来的就是地址0045处所保存的字符数组,即b[10]。
个人理解。如果错误请大牛之争。谢谢