|
学习编程最忌浮躁,我也浮躁过了。
大一开始学C语言,老师只教没到指针的地方就结束了。然后自学结构体、指针等,感觉要学都学了,不知道该学什么。后来呢,两年后还觉得自己没有入门。
那C语言究竟要学多少才算入门呢?不同的人有不同的理解,我的理解是这样的(个人意见,仅供参考)。
一,掌握基本的数据类型、基本控制流和文件读写
起码要知道一般不这样写:char str[5]="Hello";而这样写:char str[6]="Hello";掌握 for,while,switch等。
会读写文本文件和二进制文件。
二,熟悉,使用它们:
const volatile sizeof typedef malloc free #pragma #ifndef
这些字眼是不是很熟悉?没有不认识的吧?!
举个sizeof的例子,你觉得输出结果会怎样?先想想,然后编译运行验证下。
- struct A{ char ch; int i; float f; double d; char *c; }a;
- struct B{ char ch; char *c; int i; float f; double d; }b;
- void test()
- {
- printf("sizeof(a)=%d\n",sizeof(a));
- printf("sizeof(b)=%d\n",sizeof(b));
- }
复制代码
三,掌握一维和二维数组
一维数组比较简单,容易掌握。二维稍有难度,重点掌握。三维以上太有难度了。
看看个例子,理解了吗?
- void test()
- {
- int a[]={1,2,3,4,5,6,7,8};
- int *p1;
- if((int)&a==(int)&a[0])
- printf("&a==&a[0]=%ld\n",(int)&a);
- p1=(int*)(&a[0]+1);
- printf("%d\n",*(p1-1));
- p1=(int*)(&a+1);
- printf("%d\n",*(p1-1));
- }
复制代码
四,掌握指针数组和数组指针
指针数组较常用,易理解,数组指针就较有难度。如果是指向二维数组的指针就更难了。
- void test()
- {
- char a[4]={"123"};
- char*p1[4];
- char(*p2)[4];
-
- p1[0]=a;
- printf("%c\n",*p1[0]);
- p2=&a;
- printf("%s\n",*p2);
- }
复制代码
五,掌握函数指针
在硬件编程中,函数指针很常用,有时用数组保存函数指针和其它类型的指针。
下面是个最简单的例子。
- int (*f)(int a,int b);
- int add(int a,int b)
- {
- return a+b;
- }
- void test()
- {
- f=add;
- printf("%d\n",f(4,2));
- }
复制代码
据说如果连setjmp和longjmp这两个函数都玩得很熟,那就不是入门,而是高手了。
当然,C语言只是一种计算机语言,还有很重要的数据结构和算法。
暂时觉得主要是这几个,不当之处请指正。
----------------------------------------------7/9 添加---------------------------------------------------
在硬件设计中对位的操作可以用结构体设置位段。
在一般软件设计中,有些变量只有(0,1)两种状态的值,也可以这样设置,以节省空间。
- typedef unsigned char byte;
- struct{
- byte A :1;
- byte B :1;
- byte C :1;
- byte :1;
- byte E :1;
- byte :1;
- byte :1;
- byte K :1;
- }Bits;
- void test()
- {
- Bits.A=1; //如果赋值2,结果会是0
- printf("%d\n",Bits.A);
- }
复制代码
[ 本帖最后由 powerwind 于 2006-7-9 22:40 编辑 ] |
|