C和指针(个人归纳第一章--快速入手)

闲来无事,唯有看书以静心
1.1注释部分,一般人会用

**/*
	statements
*/**

来注释,但是如果遇到这样的情况:

**/*
	/*statements1;*/
	statements2;
*/**

那么你想注释的愿望就有可能落空,你可以理解为-(-1)=1,注释重叠<->没有注释(这只是个人理解,不喜勿喷~~),也就是说:注释不可以嵌套!
***正确方法:*从逻辑上删除一段代码,使用
#if (0)
statements
#endif
这样,哪怕中间还有注释,也都没有关系了
补充:’//‘是单行注释,’/
/'是多行注释,出现的问题同样适用于单行注释

1.2
gets函数

#include
int main(void)
{
    char str[30];
    char *string = str;  //一定要先将指针变量初始化
    printf("请输入字符串:");
    gets(string);  //也可以写成gets(str);
    printf("%s\n", string);  //输出参数是已经定义好的“指针变量名”
    return 0;
}

gets相当于是scanf()的升级版,而且还可以输入空格,使用起来十分方便,gets(string),相当于是让string这个字符串指针指向输入的内容
需要注意的是gets()函数自动清理留在缓冲区的回车键,所以不得不说,在学C++的string类前,gets(str)使用率还是很高的,而且也好用,puts(str)也是一样好用

1.3scanf和ch=getchar()
char* a;
while(1)
用scanf("%c",a)一个一个来读由于缓冲区里的’\n’自动读取,但是你明明还没输入…,下面的代码会直接导致错误

char *a;
while(1)
{
	scanf("%c",a);
}

正确的操作

while((ch=getchar())!=EOF&&ch!='\n')
{
	//action
}
我们除了可以使用ch=getchar()这类操作之外,还可以使用**fflush(stdin)**来清理缓冲区里的'\n',这样连续输入也不怕啦QVQ


1.4
**关于const* 和*const**
坦白说,我都不知道记这东西记了多少遍了,但是往往还是把他们搞混淆
const int*
const* int
int const*
关键在于'*'和'const'谁先谁后这个问题,如果const在前,'*'在后,我们可以理解为:p是一个指针,他指向的是const int类的数据,那么你自然不可以通过它来修改指向的数据了.同理:int* const p,理解为p是一个const,不可以再指向其他数据,只可以指向这一个(嘻嘻,王八瞅对眼了QwQ)

1.5这几个常用复制函数在不同的IDE上有的支持有的不支持
strcpy(a,b)
工业级复制,b赋给a
strncpy(a,b,num)赋给a,赋num个字节,注意自己还要加上’\0’,不然后果自负!
strncpy_s(a,size1,b,size2),相较于上面的函数,多了个size1,意思是说:把b的size2的字符赋给a,但是a只接收size1个字节,相当于是部分截取,部分接收,很好用,就是有些IDE不资瓷~~

补充:文件结束返回EOF,但是文件的末尾是NUL

你可能感兴趣的:(C和指针)