工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2168|回复: 9

你的C语言入门了吗?

[复制链接]
发表于 2006-6-30 20:42 | 显示全部楼层 |阅读模式
学习编程最忌浮躁,我也浮躁过了。

大一开始学C语言,老师只教没到指针的地方就结束了。然后自学结构体、指针等,感觉要学都学了,不知道该学什么。后来呢,两年后还觉得自己没有入门。

那C语言究竟要学多少才算入门呢?不同的人有不同的理解,我的理解是这样的(个人意见,仅供参考)。

一,掌握基本的数据类型、基本控制流和文件读写
起码要知道一般不这样写:char str[5]="Hello";而这样写:char str[6]="Hello";掌握 for,while,switch等。
会读写文本文件和二进制文件。

二,熟悉,使用它们:
const  volatile  sizeof  typedef  malloc  free  #pragma  #ifndef
这些字眼是不是很熟悉?没有不认识的吧?!
举个sizeof的例子,你觉得输出结果会怎样?先想想,然后编译运行验证下。

  1. struct A{  char ch;  int i; float f; double d; char *c; }a;

  2. struct B{  char ch;  char *c; int i; float f;  double d; }b;

  3. void test()
  4. {
  5.      printf("sizeof(a)=%d\n",sizeof(a));
  6.      printf("sizeof(b)=%d\n",sizeof(b));
  7. }
复制代码


三,掌握一维和二维数组

一维数组比较简单,容易掌握。二维稍有难度,重点掌握。三维以上太有难度了。
看看个例子,理解了吗?

  1. void test()
  2. {
  3.      int a[]={1,2,3,4,5,6,7,8};
  4.      int *p1;
  5.      if((int)&a==(int)&a[0])
  6.         printf("&a==&a[0]=%ld\n",(int)&a);
  7.      p1=(int*)(&a[0]+1);
  8.      printf("%d\n",*(p1-1));
  9.      p1=(int*)(&a+1);
  10.      printf("%d\n",*(p1-1));
  11. }
复制代码


四,掌握指针数组和数组指针

指针数组较常用,易理解,数组指针就较有难度。如果是指向二维数组的指针就更难了。


  1. void test()
  2. {
  3.      char a[4]={"123"};
  4.      char*p1[4];
  5.      char(*p2)[4];
  6.      
  7.      p1[0]=a;
  8.      printf("%c\n",*p1[0]);

  9.      p2=&a;
  10.      printf("%s\n",*p2);
  11. }
复制代码


五,掌握函数指针

在硬件编程中,函数指针很常用,有时用数组保存函数指针和其它类型的指针。
下面是个最简单的例子。

  1. int (*f)(int a,int b);
  2. int add(int a,int b)
  3. {
  4.     return a+b;
  5. }
  6. void test()
  7. {
  8.      f=add;
  9.      printf("%d\n",f(4,2));
  10. }
复制代码


据说如果连setjmp和longjmp这两个函数都玩得很熟,那就不是入门,而是高手了。
当然,C语言只是一种计算机语言,还有很重要的数据结构和算法。
暂时觉得主要是这几个,不当之处请指正。

----------------------------------------------7/9 添加---------------------------------------------------
在硬件设计中对位的操作可以用结构体设置位段。
在一般软件设计中,有些变量只有(0,1)两种状态的值,也可以这样设置,以节省空间。

  1. typedef unsigned char byte;
  2. struct{
  3.         byte A :1;
  4.         byte B :1;
  5.         byte C :1;
  6.         byte   :1;
  7.         byte E :1;
  8.         byte   :1;
  9.         byte   :1;
  10.         byte K :1;
  11. }Bits;
  12. void test()
  13. {
  14.        Bits.A=1; //如果赋值2,结果会是0
  15.        printf("%d\n",Bits.A);
  16. }
复制代码

[ 本帖最后由 powerwind 于 2006-7-9 22:40 编辑 ]
发表于 2006-6-30 23:31 | 显示全部楼层
未入门啊,晕低啊
回复

使用道具 举报

发表于 2006-7-8 00:40 | 显示全部楼层
原来与入门还有一段很长的距离.....!!
回复

使用道具 举报

发表于 2006-7-12 01:10 | 显示全部楼层
没有详细讲到数据类型,运算符
回复

使用道具 举报

发表于 2006-12-19 14:18 | 显示全部楼层
顶上来...
回复

使用道具 举报

发表于 2006-12-22 21:38 | 显示全部楼层
门在哪里?
回复

使用道具 举报

发表于 2006-12-22 21:56 | 显示全部楼层
顺着墙摸
遍历了所有的墙就会找到门了...

回复

使用道具 举报

发表于 2006-12-23 18:11 | 显示全部楼层
快摸到地板了还没找到门..
回复

使用道具 举报

发表于 2006-12-23 18:15 | 显示全部楼层
楼上的水帖说明:找到一个正确的方向的重要性..
回复

使用道具 举报

发表于 2006-12-24 18:54 | 显示全部楼层
死啦墙还没有找到~~~
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-5-17 03:25

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

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