找回密码
 立即加入
搜索

查看: 1267|回复: 3

[技术交流] 深入学习C语言知识点checklist——测试你掌握C的程度

[复制链接]
痞子 发表于 2009-11-8 11:26:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转闽南师范大学。

您需要 登录 才可以下载或查看,没有账号?立即加入

×
字符串   $ ?0 i& j4 u7 r) W, h# A$ S
学习时间:1.5W(“W”周,下同)
- E* `5 v& S; z) h0 n& g 知识点checklist
0 U* V4 |5 Z/ t; ] strlen()函数的返回值是什么类型的?
& f  \3 v) o. `+ ~1 u 字符串strlen()的值,是否和他占据的内存空间相同?
/ B$ c- R+ G  |8 i 你是否知道strcpy函数存在的潜在风险?如何避免?
9 v5 M6 ^- F) f# P 如果一个字符串没有字符串结束符,而调用str开头的库函数,会发生什么? 3 p# P% d- Z& p6 F1 p" s
Strcpy(),strcat(),strcmp(),strncpy(),strncat(),strncmp()内部到底是如何运行的?这些函数到底对源字符串和目标字符串做了些什么?你是否观察过它们运行时两个字符串内存的变化?
% d0 T5 Q& _2 A# p( W/ D- L- y- B8 Z 上面这些函数使用时,各有哪些需要注意的地方?
2 N2 I! P( j7 B1 C* u 你会几种字符串查找操作? & N! U+ k+ U. @+ K+ h
c语言中有字符串这个数据类型吗? ' ]" q9 J1 H* g! G
对字符串进行操作的时候,是否为字符串结尾符预留存储位置?不然的话容易造成非常访问内存。     
. @; @" ]+ @3 @0 ~1 K: ~  ! g9 }/ D1 g3 I. c$ U
数组 0 [# m2 u  D( O
学习时间:2W $ i/ d1 {* Z' z; h4 G. I4 y* _$ k
知识点checklist
/ g& O8 e9 q0 C% z) X0 N6 ?! Z 你肯定知道,定义“int a[10];”,a[10]这个元素是无效的。
1 M8 {, \. E! ]. s8 X' P 你知道几种数组初始化的方法?
9 V# X1 c  q! [$ \) } 数组和指针有千丝万缕的联系而又不同,你是否对他们在不同情况下的使用进行过详细的总结? 1 G' ?3 x- K: j2 c+ h
“int calendar[10][20];”,这是一个什么样的数组?它拥有10数组类型的元素,还是20个?
" q" j  i/ k* X6 d4 a2 I “int a[10];”,数组名a在本质上是一个什么?你是否打印过a的值?
7 p2 d7 k0 ^* L9 G 你知道几种获取数组某元素的方法?
: \5 R5 K1 E& ?8 t6 ~) |  W4 _ 指针和数组相同吗?什么时候相同?什么时候不同? / S. b- Z, O' g  s0 `8 \4 J
用指针和下标访问数组元素,那种方式更快?     
7 ?8 B9 R- _4 X$ {" o  
& L- A7 S5 _) w' ~& B0 }0 O 结构体 2 a' T  y' C  D' @; g9 Q( C
学习时间:1W 4 `6 M  B$ ~9 E( j& P) i
知识点checklist
# d" a$ G3 u0 S3 L  | 你知道什么是位域结构体吗?如何定义它?如何使用它?
! Q% \: G9 T2 S: b0 F7 _ 你知道字节对齐对结构体占用内存空间大小的影响吗?如何计算结构体占用内存的大小?     ' F8 ~4 ?1 {! p1 o
  3 a) o2 T+ G; E  k$ z
8 B* X* E$ f1 n3 d1 \& ]. g
学习时间:1W
4 Z3 I" c/ t/ t7 r 知识点checklist 5 O2 O7 _% ?+ u
你知道宏的本质是什么吗?函数?语句?类型定义?或者其他?
; C0 Y* g' ]( b# V' N8 } 你知道语言设计者为什么设计宏吗?这些原因目前是否仍然成立?
6 b5 S1 P; r5 n/ W- x 你会设计带有参数的宏吗? 3 o; a# N2 v2 m+ O9 s4 v8 n1 b
你知道使用宏的参数的的时候的注意事项吗?
0 L; X, y* L6 s1 o 你会设计带有可变参数的宏吗?
# Q* c6 C9 \& P6 o2 o6 h; s# @/ l# u( g* C( S 你知道使用宏有什么劣势吗? - g6 n1 m; M" ]- D
你有没有更好的替代方案?     
3 |3 h0 X2 ?0 H  9 B; H& z& p( ]- |8 u6 n, ]3 m
  . G' W3 {  t; J6 ^2 t
枚举 5 `( K+ o! w& {1 i- K- U
学习时间:0.5W
, o! C5 S7 Q: G+ ^" G 知识点checklist * F+ u/ ^; t5 q$ u. X$ K
是否可以指定枚举中各项的值? 3 u& O4 V0 ~, n9 k# k" ?$ I
如果不指定值,枚举的第一个值是多少?
: Y7 `* e! p% l3 @& Q! u9 d  l 枚举的值是否可以是负数? * N1 T1 S# h) S1 K
定义枚举的时候,你是否专门定义了枚举的最小值和最大值?       [' n; n1 N# ?, s7 s2 l
  " A; e. L6 w8 g  K+ w
  $ F) k& K  Z/ Z5 I+ `
Switch 9 a; z$ V. `7 _- S
学习时间:0.5W
* E5 l8 v! k1 C 知识点checklist
8 `# n8 ]$ b. o7 E% ~ switch(c)中的c的数据类型有哪些? ; P' M, P' o5 d
你是否在所有的switch中都加了default语句?
: N% ^) [8 Q, T9 J2 h, `/ x7 e 是否在所有的case中都加了break语句(一般情况的做法)?如果你不加break,将会发生什么?     
6 m* H6 s* e" @/ i3 u  
/ J" K+ y$ Z" N9 K' W. o8 a  
# ~- J1 p+ X) b, P7 L9 f Static
- D$ L' G8 I$ k9 d( N% q 学习时间:1W
6 L: s* o  j. A( ?1 Y, o& D% A 知识点checklist ' W* _/ e! L* C/ @5 t; O
static的三个主要作用是什么? 2 f2 l6 m3 a  Z* a
static的修饰的局部变量是保存在什么地方的?全局变量哪?
7 Q. C; G. _9 G/ _0 n" B' ~ static修饰的全局变量和函数,在其他的文件中是否可以访问?如何访问? ' l+ E8 a. W1 J$ V
你知道static是c语言中实现封装和隐藏的利器吗?你是否经常使用? ( @# E2 q+ {! M
定义在不同源文件中的static全局变量,编译器是否允许他们的变量名称相同?他们在内存中的地址是否相同?函数那?     
9 J) e) t6 ~/ O5 I1 H& |  
$ L8 V- i) V) T# @7 W, e& t( R6 ]  
) D' ]- P+ ^5 {( z const
# b. m* a# S6 J$ E 学习时间:1W : i$ G0 s- ^" L+ Q- p1 z  \
知识点checklist
3 ~' Y. \" r- K1 X+ {. z/ ` 你是否经常使用const来表明不能够被更改的变量? ( U! p' T5 x* k
你是否经常使用const常量来代替宏?
% M9 K7 d$ N: R1 x/ ^' c 下面四种情况,你知道是各表示什么意思吗?
7 i" n6 ~# [$ R6 J. B int  i_value= 10;  # P8 Z, p* v# Q  _! U  q' c
const  int* pvalue = &i_value $ s, y8 a- B! H) I* b: w: @
int  const *pvalue = &i_valueint*  const  pvalue= &i_value
' `; A9 \9 C' T1 E) A const  int* const  pvalue = &i_value
+ O% Q6 Y9 j1 k+ h: a( h) z 你知道const常量如何初始化吗?     0 y. a/ ]* J' a/ _% d
  ! t. m2 s7 O+ J. V
  , M3 E- M5 T$ v! u) `0 V
Sizeof 1 l7 S2 |$ }- w6 d
学习时间:1W
5 Q! T3 s! H7 A  Z% D3 @& o 知识点checklist / F; m6 n( N( X( |6 I
对于字符数组,strlen和sizeof的值是否相同?
7 {% L- k  k; s6 z2 R Sizeof本质上是函数还是宏?
4 q$ r6 T5 z$ T: ~: n, A5 A Sizeof的返回值是什么类型?     
' b' b$ m+ j5 c9 w, b/ \  - a! M. E" U! u$ z( S
  " M8 u  j% ?& M' {
指针 , C* `- d, C  C1 X5 x' o
学习时间:3W 2 i) d; r1 k3 V0 P* S% y# U% _: n
知识点checklist
) `# r+ K6 d+ A2 |- A( W “int *p;”&p,p,*p他们的值分别表示什么含义? 7 Q+ {! e! X' D9 k* }7 h& E
你定义的指针初始化了没? & k; E/ ]$ ~/ i7 \
你理解指针的指针的概念吗?你会使用吗?
# j. u5 p0 T1 [6 c “int *pi_value; pi_value = 0x100000;” pi_value + 1的值是是多少?
2 ]* y7 j. U, d% d' k$ j 你会定义函数指针吗? 0 Y: `. I, o7 w5 ?- u3 y
你会使用函数指针调用函数吗?
$ M! N4 ?. t2 f, K. J+ ]8 l# m 关于指针和数组,请参见知识点数组。     
/ Y, @! m! {+ Z/ |5 L, ]  w  
& O7 w$ g3 P# c& i0 w9 }    D8 J: d# }) g2 Z. j8 U
动态分配内存
* q% y1 ?, F7 d" N+ g! j" _ 学习时间:1W
1 Y0 a& h/ f- m- N# r* Y# U# P6 Z 知识点checklist
) Y6 e, `% F2 q 动态分配的内存是保存在什么地方的?   ~7 r0 [- {% K5 ~
什么情况下使用动态分配内存?
  p& r/ F  m/ J 动态申请内存一定要释放,否则会内存泄露。你是否使用过内存检测工具?     
7 ~( R: J/ }' i4 x+ E) l  z5 K' ]  
9 g. m2 I( h1 o  
7 K7 A( Y: U" H# y5 D) `: Q 函数
0 n9 ^, R8 F) T: w 学习时间:1W
. r/ ]) a1 m$ X- B 知识点checklist
9 J4 w# v' E/ _ 如何查看函数在内存中的地址?
# s- e0 ~( [8 Q$ E: j: \ 如何给一个函数指针赋值?   B, u# H( E2 w% y0 _5 c% S
你是否会定义可变入参函数 ! N! K4 C% X7 a
你是否可以区分函数的形参与实参?
2 C& Q& k0 ^7 l 如何定义函数名,以准确的表达函数的用途?
5 g3 K6 Z3 D+ z4 O8 f3 o* k  g3 L& I 你是否使用const来修饰函数入参和返回值,以表的特定的含义?
9 b+ O+ M7 g- M4 ^+ r+ a 递归如何使用?     
% z8 i( R/ J3 T7 W& j: d0 ^  
7 A/ L9 n. z6 O 变量 2 n! t( I; q0 x, F1 Q* r- s
学习时间:1W : G! e2 C' g# \- E
知识点checklist 9 E# {/ u* d5 O" o1 y" d( s
全局变量,局部变量,常量分别保存在内存中的什么地方? 5 s1 j# `9 c( J. r0 d2 X0 }, w7 ^' S
不同类型的变量,你是否知道其作用域? / R* Q4 b) N: j! @+ d# V
全局变量和局部变量是否可以重名?你是否在这样做?
1 m% I; U+ _# |0 B0 G' ?/ J2 n 局部变量在函数退出后是否有效,为什么? 5 W  Y5 i3 C4 C( B3 e- ^$ M0 s' A
全局变量为什么不允许定义在头文件中?有何危害?     2 O( M; @8 _" ?! ^' B
  
+ ~, y! [$ ^' x 链接(linux) * R; E$ }# }" u) _5 |) q
学习时间:1W
' w7 S- Q. R+ m2 m4 A1 H 知识点checklist 1 v7 |" c7 E" i! ]; U
链接位于编译过程的那个阶段?
' a( M2 j" x7 O. L) [ 动态链接库和静态链接库使用时有何区别? 7 X3 J) V! w, H7 c9 C) F: o3 |$ e; }
如何对动态链接库进行动态加载(不用重启程序而加载链接库)? 5 s/ B1 v/ d" J" ~6 X( D
动态链接有何优点?
- `8 M" z# t8 g" E' X! q# d 动态链接库中是否定义了非static的全局变量?你是否知道这是一个非常危险的动作?
# C7 v/ K) N- O2 n; X. {9 i 动态库中的全局变量(非static)和函数(非static)是否可以和上层全局变量和函数重名?重名后会发生什么事情?     
  r4 S# Q$ c( m# L4 w1 u  ! c) t5 Q' n* [& |$ f
  
" g: q6 c# B4 r+ C9 r2 ~1 a 运行时的数据结构(linux)
* D8 l- Q  R7 x& ^: c( r, { 学习时间:1W
: h( g6 e/ J- ~1 z 知识点checklist 3 S3 a& W) @0 `
你知道什么是段的概念吗? 7 S# x8 D3 U" m- O
可执行程序可以分为几个段?每个段保存的是什么内容?
/ T/ K2 U' R4 q  O( Z/ r6 {+ r 如何查看可执行程序各个段的大小?   O, [7 m% L& W0 q" e% b& N, A
当函数被调用时发生了什么?
/ ?1 y) g. _/ a% G 你有没有试过程序的栈空间最大有多大?程序超过此大小会发生什么? 7 X& w! V; j" v- c6 r2 S0 z
你使用的系统的栈是向下生长的,还是向上生长的?     
& d- @6 P; A5 a( V  " o, S) c0 F# S6 K* p) x# J
Include
0 l0 V6 S6 t* h& I, g4 ] 学习时间:0.5W
+ a0 b! x! Q( P9 v! i* l/ L 知识点checklist
1 r  }7 Y& s  t 1、如何避免对同一头文件的多次include?     6 i% c) N, i6 _' Z
  9 L2 d; C* b) A& P/ E9 o1 f' {& U
  
# o- Q+ R( Q. r3 A 声明 ) M1 A4 [1 V4 I) G+ e; D- U6 z
学习时间:1W 6 f' w5 A4 `! N
知识点checklist 7 R- y( i* ~; _; K- F+ J
什么是声明,什么是定义?
- c- U! |# V1 u, L+ s3 k" S 你是否会运用c语言声明的优先级规则?     + h# D3 T/ y$ n% O
  
( q0 A2 k* @+ }+ M; L  " E2 `: N/ H0 O1 K6 P. {
关于复杂度:
1 D1 d( j: |4 n 软件的首要技术使命是管理复杂度。 + j5 Q( C) |5 a7 F
优秀程序员的一个特质是将复杂的事情简单化,而非将简单的问题复杂化。所以,他们一般会选择简单的解决方案。
9 p" F2 w9 B3 y- b* Q$ E! D  E 极尽机巧,复杂的解决方案,除了将新手搞得晕头转向之外,别无他用。
' W% U/ z; s7 q! s& ^8 g 阅读优秀程序员的代码,是一种享受,你很少遇到思维的阻力,你可以尽情的享受简单之美。
8 B* Q5 O$ }7 l. ~ 所以,对难以理解的语言特性,要慎用、少用,最好不用,而以简单的解决方案替代之。但是,在做这些之前,你必须对这些知识点理解深刻。   k* Q  B8 e5 a& a$ L
; a: O4 n" E: V5 \& @- Z* r

- J6 g0 v' h! N. @4 W8 v4 Q0 A- z* ?6 k  G' g

3 u! D/ a7 D  m: ?转自CSDN论坛。  ^9 d! u; {# z7 V
! g- D# C4 \5 D% v0 s' T1 y
6 f1 W9 r+ z5 P- D: A1 F
PS:CSDN,床上等你
; F" @1 M/ W! T4 E) `; F. D' I  
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
人生无奈 发表于 2009-11-8 11:38:13 | 显示全部楼层
貌似都有学过。。。。
) H/ u# x1 M  a3 d3 H然后都忘光了
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

282806659 发表于 2009-11-8 11:43:21 | 显示全部楼层
好像还记得些,不过现在都不记得,因为学了之后除了考乐级,就没有用了。
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

 楼主| 痞子 发表于 2009-11-8 11:47:25 | 显示全部楼层
试用下搜狗的云输入法。
& ]8 F3 o/ C2 }7 Q& m8 |
; r. ~$ X: Y3 x( k% i
0 x# k0 C* Y' S$ {其实非计算机专业或者不和计算机专业挂钩的同志,上面那份表你们笑笑就好了。
宣传/支持龙江曦月.龙江曦月需要理解,适宜长居
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

手机版|龙江曦月 ( 闽ICP备05009150号-1 )闽公安网备35060202000316

GMT+8, 2025-5-26 07:44 , Processed in 0.042722 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表