知识点
字符串
指针阅读方法
敲黑板先看这里
你觉不觉得C语言基础知识概念在头脑里没有形成知识体系?是否比较模糊比较乱?这就对了?我之前也是,有些知识点时间长了容易忘或者混淆,有些初学者抓不住重点觉得C语言复杂,难!实不相瞒,我也是这样的感受,于是我想是时候整体的把C语言给好好的总结一下了,这样形成一个知识体系,就不容易忘,也不容易混淆,这就是这次总结的意义所在。
分为几个板块总结:数据类型、指针与数组、字符串、多维指针与多维数组、函数、内存分配与操作问题、符号总结、控制语句、以及编译方面的问题。
总结宗旨:绝不专牛角尖!主要围绕常用应用知识为主,突出重点,能够很好的形成知识架构。比如:总结了float一般就不会再总结double,这样做没有多大意义,相反的,把重要的拿出来好好分析一下,是很有意义的,而相似的东西就可以举一反三了。实际上就这些知识点,概念搞明白后,C语言就通透多了
注意:
如果指针没有搞清楚,请先看我的关于指针与数组的总结那篇,
字符串与指针和数组有着非常好的关系,一定要理清楚这三者的关系。
字符串
1.字符串是有序字符的集合,是程序中的基本元素之一,C语言中没有字符串的概念:
C语言中通过特殊的字符数组模拟字符串----以’\0’结尾的字符数组模拟字符串。
2.在C语言中,双引号引用的单个或多个字符是一种特殊的字面量:
它的本质为字符数组,编译器自动在结尾加上’\0’字符,存储于程序的全局只读存储区。
3.字符串字面量的本质是一个数组,可以看作常量指针,字面量中的字符不可改变,里面至少包含一个字符:
char ca[] = {'H', 'e', 'l', 'l', 'o'}; //字符数组,不是字符串
char sa[] = {'w', 'o', 'r', 'l', 'd', '\0'}; //以'\0'结尾的字符数组,是字符串
char ss[] = "Hello world!"; //双引号引用字面量,本质为字符数组,自动加'\0',是字符串
char* str = "Hello world!"; //字符串字面量,可以看作常量指针。
"Hello world!"是一个无名的字符数组。
4.字符串长度是通过’\0’结束符来确定,用函数strlen来返回(字符串相关函数都依赖于结束符’\0’) ,长度指的是第一个’\0’字符前出现的个数;字符串长度就是字符串所包含字符的个数。
5.字符串、字符数组、字符指针三者看似相同,而本质不同。字符串之间的相等比较需要 用strcmp完成。不可直接用==进行比较。
指针阅读方法
—右左法则:
从最里层的圆括号中未定义的标示符看起,(首先往右看,再往左看,遇到圆括号或方括号时可确定部分类型,并调转方向),重复括号内的步骤,直到阅读结束。
左右法则总结于编译器对指针变量的解析过程,指针阅读练习的意义在于理解指针的组合定义,可通过typedef简化复杂指针的定义。
例:
int (*p1)(int* , int (*f)(int*));
//p1是一个函数指针,指向的函数的返回值为int 指向的函数的参数有两个,
一个参数为 int*类型, 另一个参数是名字为f的函数指针( f指向的函数返回值为int,
参数只有一个为int*);
int (*p2[5])(int*);
//p2是包含5个元素的指针数组,每个元素是函数指针(指向的函数参数为int*,返回值为int)。
int (*(*p3)[5])(int*);
// p3是指向有5个元素的数组的指针,数组的每个元素是函数指针(参数为int*,返回值为int);
int* (*(*p4)(int*))(int*);
//p4是函数指针,指向的函数参数为int*,返回值为函数指针(指向的函数参数为int*,返回值为int*)。
int (*(*p5)(int*))[5];
// p5是函数指针,指向的函数参数是int*,返回值是数组指针(指向一个 有5个int类型元素的数组)。
指针阅读小结:
指针阅读一两次可能没有什么感觉,甚至不会读,这个没有关系,如果出现这种情况,请暂停下来过几天再来看,多重复几次,看着就自然而然的会了,我也是这样的情况。关键在于不会读的时候千万不可放弃,也不要怕,抗过几次下来,你就赢了。
总结
以上总结以C语言知识框架为主线,着重强调实际经常应用!反复浏览体会可牢记,形成自己的知识框架,然后灵活应用,知识点来源于狄泰软件学习总结所得。