是否该纠结这些小点
#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两个,不用单引号或双引号,如果是数字则认为是数字常量,如果是字母则认为是变量。
我的问题是,我以上理解是否正确
|
|