首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

字符串数组显示有关问题

2012-03-07 
字符串数组显示问题mian(){char b[10]{nlk}char *yybprintf(%c\n,y)printf(%s\n,y)}编译显示

字符串数组显示问题
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,谁能帮忙解释一下。


[解决办法]
这样看看:

C/C++ code
#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;}
[解决办法]
C/C++ code
#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]。

个人理解。如果错误请大牛之争。谢谢

热点排行