1.结构体的用法
typedef struct tagNode
{
char *pItem;
pNode pNext;
}*pNode;
当用上面的代码定义一个结构时,编译器报了一个错误,为什么呢?莫非C语言不允许在结构中包含指向它自己的指针吗?
答案与分析
C语言当然允许在结构中包含指向它自己的指针,我们可以在建立链表等数据结构的实现上看到无数这样的例子,上述代码的根本问题在于typedef的应用。
根据我们上面的阐述可以知道:新结构建立的过程中遇到了pNext域的声明,类型是pNode,要知道pNode表示的是类型的新名字,那么在类型本身还没有建立完成的时候,这个类型的新名字也还不存在,也就是说这个时候编译器根本不认识pNode。
解决这个问题的方法有多种:
1)、
2)、
typedef struct tagNode *pNode;
struct tagNode
{
char *pItem;
pNode pNext;
};
注意:在这个例子中,你用typedef给一个还未完全声明的类型起新名字。C语言编译器支持这种做法。
3)、规范做法:
struct tagNode
{ char *pItem;
struct tagNode *pNext;
};
typedef struct tagNode *pNode;
2.一般在使用ubuntu的时候,选择源的时候进入ubuntu软件中心,选择编辑->软件源(s)...->ubuntu软件,下载自:中国服务器改为http://mirror.lupaworld.com/ubuntu
3.将windows的fat32盘挂到linux下
Linux将系统中所有的设备都看做文件,所以在Linux下访问Windows分区非常方便,只要使用mount命令将Windows分区挂载成Linux的一个文件夹即可。
mount命令的使用格式是(必须以 root 用户身份登陆):
#mount [-afFhnrvVm] [-|<标签>] [-o<选项>] [-t<文件系统>] [设备名称] [挂接点]
若我们要将Windows的某一分区(如D盘)挂载到Linux的/mnt/win这个目录下,首先要在/mnt下建立win文件夹,然后输入命令
#mount /dev/hda5 /mnt/win
再进入/mnt/win目录,你就能看到Windows中D盘的内容了。
不过用上面的方法挂载Windows分区后,很可能会出现另一个麻烦的事情,就是Windows中所有的中文文件名和文件夹名全部显示为问号(?),英文却能正常显示。要解决这个问题,只要在mount命令中加入一些参数让它正确显示中文。将上述命令改为:
#mount -t vfat -o iocharset=cp936 /dev/hda5 /mnt/win
加载了这个分区,在不使用时我们还可以将它卸除,而卸除的命令为umoun。若是卸除上述分区,只需要输入:
#umount /mnt/win
另外,我们还可以让Linux在启动时自动加载分区,这样就不用每次使用Windows分区时都要输入命令加载了。
首先,以root用户登陆,编辑/etc/fstab文件,在最后添加如下一行:
/dev/hda5 /mnt/win vfat codepage=936,iocharset=cp936 0 0
然后在/mnt目录下建立win文件夹,重新启动计算机后,再访问/mnt/win目录就是Windows分区的内容了。当然,你也可以通过此种方法加载多个分区。
4.有无法连接的动态库
应该是缩进问题,特别是把几个不同的源码拷到一块修改调式的时候容易遇到,因为两个人写的程序缩进可能不一样,有的是tab,有的是空格,这用肉眼很难察觉。把缩进都改为一种格式就可以了。
6.typedef与#define的比较
typedef比#define好,特别在有指针的场合
根本原因:#define只是简单地字符串替换而typedef则是为一个类型起新名字。
例:
pint s1, s2; //s1和s2都是int型指针
PINT s3, s4; //相当于int * s3,s4;只有一个是指针