第1个回答 2013-09-22
基本原理:
C语言中字符串是指从某个内存地址开始的字符到特定的字符'\0'为止。字符串实际上就是用字符串的第一个字符的“首地址”表示。
char st[30]="Mynameis";puts(&st[0]);//这边运行出来的结果为 Mynameis 运行OK。
-->&st[0]当然是'M'的首地址了,所以该语句当然输出从M开始的整个字符串
char st[30]="Mynameis";puts(st[0]);//这边运行就报错,数组不就是地址么?为什么还要加取地址符&??
-->st[0]是字符'M',而puts(*)中的参数必须是“地址”才行,所以,这个调用当然是错的。
char st[30]="Mynameis";puts(&st[1]);//这边运行结果为 ynameis , 开头字母M为什么会丢掉?
-->&st[1]是字符以'y'的首地十的字符串,所以结果当然没有M了
char st[5]={‘a’,'b','c','d','e'};
printf("%c",st[1]);//这边不用加取地址符运正常为b
-->这个是一个字符数组,在最后一个字符没有'\0',所以它不是一个字符串,st[1]表示数组的第一个字符,当然是b了。注意格式符为'%c‘,就表示一个字符的意思.
char st[5]={‘a’,'b','c','d','e'};
printf("%c",&st[1]);//这边加取地址符运行就为一个符号,可能是乱码,为什么?
-->&st[1]是一个地址,占2字节(有的是四个字节),而%c是显示一个1字节的字符。所以&st[1]不可能显示合适的字符了。
第4个回答 2013-09-21
char st[30]="Mynameis";puts(st[0]);//这边运行就报错,数组不就是地址么?为什么还要加取地址符&??
数组不是地址,st[0]表示的是数组第一个元素的值,并不是数组的地址,如果是数组的地址,应该是 st
char st[30]="Mynameis";puts(&st[1]);//这边运行结果为 ynameis , 开头字母M为什么会丢掉?
数组是从0开始的,&st[1]是从数组第二个元素开始,所以M没有了
printf("%c",st[1]);//这边不用加取地址符运正常为b
只是打印一个字符,st[1]中存的就是,所以正常。
printf("%c",&st[1]);//这边加取地址符运行就为一个符号,可能是乱码,为什么?
&st[1]是第二个元素的地址,跟使用的%c不符,使用%s打印字符串就可以正常显示了。