C笔记
2016-08-20 本文已影响64人
JianMing
-
const double PI = 3.1415
保护数据,使得PI
不能被修改。 -
const int day[3] = [1, 2, 3]
,day[1] = 3
是会发生编译错误的。 -
double rates[2] = [1.1, 2.2]; const double * pd = rates;
这表明不能使用指针pd
去改变它所指向的值, 但可以让pd
指向别处:*pd = 3.3
// 不允许pd[1] = 4.4
//不允许rates[0] = 3.3
// 允许pd++;
//让pd
指向rates[1],允许 -
首先,把
const
数据或非const
数据的地址初始化为指向const
的指针或为其赋值是合法的;但是,只能把非const
数据的地址给普通指针。 -
const
可以声明并初始化一个个不能指向别处的指针。如double * const pc = rates;
指针pc
不能指向别处。 -
最后,在创建指针时,还可以使用
const
两次,该指针既不能改别它所指向的地址,也不能改变指向地址上的值。
fgets(char *restrict, int, FILE *)
和 gets(char *)
区别
-
fget()
函数的第二个参数指明了读入字符的最大数量。如果该参数的值是n,那么fgets()
将读入 n-1 个字符,或者读到遇到的第一个换行符为止。 - 如果
fgets()
读到一个换行符,会把它存储在字符串中。这点与get()
不同,get()
会丢弃换行符。 - 如果
fget()
函数的第3个参数指明要读入的文件。如果读入从键盘输入的数据,则以stdin
作为参数,该标识符定义在stdio.h
中。
gets_s()
与fgets()
区别
-
gets_s()
是C11中新增的,并且是stdio.h
输入/输出函数系列的可选扩展。 -
gets_s()
只从标准输入中读取数据,所以不需要第3个参数。 - 如果
gets_s()
读到换行符,会丢弃它而不是存储它。 - 如果
gets_s()
读到最大字符数都没有读到换行符,会执行一下几步。首先把目标数组中的首字符设置为空字符,读取并丢弃随后的输入知道读到换行符或文件结尾,然后返回空指针。接着,调用依赖实现的“处理函数”(或者你选择的其它函数),可能会中止或退出程序。
string.h
中的常用字符串处理函数
-
size_t strlen(const char * s)
函数用于统计字符串的长度(其实是统计字符串开始到\0
的字符个数)。 -
char *strcat(char * restrict s1, const * restrict s2)
函数接受两个字符串座位参数,并把第2个字符串的备份附加在第1个字符串末位,并把拼接后形成的新字符串座位第1个字符串,第2个字符串不变。(拼接字符,要保证第1个字符串的长度要够,而且返回的字符串地址,就是第一个字符串地址)。缺点:不会检查第1个字符串是否会溢出。 -
char *strncat(char * restrict s1, const * restrict s2, size_t n)
该函数的第3个参数指定了最大添加字符数,在添加到size_t
个字符或者遇到空字符时停止。 -
int strcmp(char *, char *)
函数比较字符串的内容
是否相等,而不是指针
。如果字符串相同,函数返回0。如果遇到不想等的字符,如比较"A"和"B"则返回"-1",如比较"B"和"A"则返回"1"。 -
int strncmp(char *, char *, size_t n)
函数在比较两个字符串时,可以比较到字符不同的地方,也可以只比较size_t
参数制定的字符数。 -
char *strcpy(char *, char *)
是将第2个参数中的字符串内容,拷贝到第一个参数中,一定要先给第1个参数分配地址空间,不然可能会出现问题,同时strcpy()
不会检查目标空间是否能容纳源字符串的副本。(一般字符串变量是一个指向字符串的指针,pts2=pts1
拷贝的是字符串的地址,而不是字符串的内容) -
char *strncpy(char *, char *, size_t)
,size_t
指明可拷贝的最大字符数。 -
sprintf(char *restrict, const char *restrict, ...)
函数是声明在stdio.h
中,该函数是将数据写入字符串,第一个参数是目标字符串的地址,其它参数和printf()
相同,即格式字符串和待写入项的列表。 -
char *strchr(const char * s, int c)
如果 s 字符串中含有 c 字符,该函数返回指向 s 字符串首位置的指针(末尾的空字符也是字符串的一部分,在查找范围内);如果在字符串 s 中未找到 c 字符,该函数则返回空指针。 -
char *strpbrk(const char * s1, const char * s2)
,如果 s1 字符串中包含 s2 字符串中的任意字符,则该函数返回指向 s1 字符串首位置的指针,如果在 s1 中未找到任何 s2 字符串中的字符,则返回空字符。 -
char *strrchr(const char * s, int c)
函数返回 s 字符串中 c 字符的最后一次出现的位置(末尾的空字符也是字符串的一部分,在查找范围内)。如果未找到 c 字符,则返回空指针。 -
char *strstr(const char * s1, const char * s2)
该函数返回指向 s1 字符串中 s2 字符串出现的首位置。如果在 s1 中没有找到 s2 ,则返回空字符。