(参考书籍C Language Demystified)
一、首先看看下面的这个代码

#include<stdio.h>

#include<stdio.h>
void main()
{
char st[]="When you go home?";
printf("%s\n",st);
printf("%c\n",st[5]);
printf("%s\n",st[5]);
}

最后输出结果

C语言的一些常见错误(2)_#include


分析:

很明显第一条语句中st代表的是字符串的首地址,所以能输出字符串的内容;

第二条语句的st[5]代表第六个元素的地址;

而第三条因为%s输出字符串,若要输出you go home?首地址

应该&st[5];

甚至可以像这样printf(&st[5]);

因此我们得注意字符的地址与字符串地址的不同!!!

二、scanf与空格

#include<stdio.h>

#include<stdio.h>
void main()
{
char st[32];
scanf("%s",st);
printf(st);
}

看看结果

C语言的一些常见错误(2)_#include_02

为什么出现这样的情况?原因就是scanf遇到空格就会停止!!!
解决方案也很简单:
①要么使用像书中介绍的gets(st);
②要么采用我老师上课讲的这种形式scanf("%[^\n]",st);

三、不输出数组内容

#include<stdio.h>

#include<stdio.h>
void main()
{
int a[3]={1,2,3};
int i;
for(i=0;i<3;i++)
{
printf("%d\t",&a[i]);
}
}

想必大家都遇到过这种情况,那就是在printf中加入了&取地址符;
大家记得不要加!!!
🌂Add:当i=0时,&a[0]和a是一样的;