A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



是否该纠结这些小点
#include <stdio.h>

int main(void)
{
char string[] = "Good boy!";

printf(string);

printf("\n");

printf("%c\n",string[ 1 ]);

printf("%s\n",&string[ 0 ]);

printf("%s\n",&string[ 1 ]);

printf("%s\n",&string[ 2 ]);

putchar( string[ 1 ] );

printf( "\n" );

return 0;
}
上面是我自己写得代码,主要是为了学习数组,指针以及putchar和printf。
我从上面这段代码得出一些结论不知道对不对,另外还有一个问题:
string[ 1 ]是指针下标表示法,等同于*(string+1),都指的是对string指针的下一个指针的解引用。

string[ 1 ]既代表了"o"字符,也代表了”ood boy!“字符串。

用printf打印的时候string[ 1 ]代表了”ood boy!“字符串,
用putchar打印的时候string[ 1 ]代表了”o“字符。

其实string也可以理解成数组。
string[ 1 ]也可以理解成数组的第二个元素。数组的第n个元素string[ n-1 ]其实就是指针string增加了n-1之后解引用。

所以数组a[ n ]的本质还是指针的运算之后解引用。

关于printf函数,做了一下尝试,以下代码:
1.printf("%c\n",'a');//运行结果 a
2.printf("%d\n",'a');//运行结果 97
3.printf("%d\n","a");//运行结果 4282172
4.printf("%c\n","a");//运行结果 <
5.printf("%s\n","a");//运行结果 a
6.printf("%d\n",97);//运行结果 97
7.printf("%c\n",97);//运行结果 a

前两个我打的理解是,‘a’代表了一个字符常量,用转换说明符可以转换成a或97,这个是ascii编码的内容。

345三个,用双引号引起来的代表了一个字符串,所以最后一个正确。3,4两个,字符串和%d或%c无法对应,所以会出现未知错误。

6,7两个,不用单引号或双引号,如果是数字则认为是数字常量,如果是字母则认为是变量。

我的问题是,我以上理解是否正确

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马