• 学习积累


    1.结构体的用法

    typedef struct tagNode

    {

      char *pItem;

      pNode pNext;

    }*pNode;

    当用上面的代码定义一个结构时,编译器报了一个错误,为什么呢?莫非C语言不允许在结构中包含指向它自己的指针吗?

    答案与分析

      C语言当然允许在结构中包含指向它自己的指针,我们可以在建立链表等数据结构的实现上看到无数这样的例子,上述代码的根本问题在于typedef的应用。

      根据我们上面的阐述可以知道:新结构建立的过程中遇到了pNext域的声明,类型是pNode,要知道pNode表示的是类型的新名字,那么在类型本身还没有建立完成的时候,这个类型的新名字也还不存在,也就是说这个时候编译器根本不认识pNode。

     解决这个问题的方法有多种:

    1)、

    typedef struct tagNode   
    {  
      char *pItem;  
      struct tagNode *pNext;  
    } *pNode;   

    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.有无法连接的动态库

    第一步:确认有哪些Lib无法Load 
    >ldd move_db 
    linux-gate.so.1 => (0x0089c000) 
    libmysqlclient.so.15 => not found 
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00cfa000) 
    libm.so.6 => /lib/libm.so.6 (0x00804000) 
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x009f8000) 
    libc.so.6 => /lib/libc.so.6 (0x0069e000) 
    /lib/ld-linux.so.2 (0x0067b000) 
     
    第二步:系统要确认动态库的地址,把动态库的路径放到/etc/ld.so.conf中 
    建议:在/etc/ld.so.conf.d/上新建动态库相应的文件配置文件*.conf, 
    在该文件中填上该动态库的绝对路径 
    此例: 
    vim /etc/ld.so.conf.d/ld.mysql.so.conf 
    /usr/local/mysql/lib 
     
    第三步:运行ldconfig重建/etc/ld.so.cache
     
    5.在python脚本编写的时候遇到:IndentationError:unindent does not match any other indentation level

    应该是缩进问题,特别是把几个不同的源码拷到一块修改调式的时候容易遇到,因为两个人写的程序缩进可能不一样,有的是tab,有的是空格,这用肉眼很难察觉。把缩进都改为一种格式就可以了。

    6.typedef与#define的比较

    typedef比#define好,特别在有指针的场合

    根本原因:#define只是简单地字符串替换而typedef则是为一个类型起新名字。

    例:

    二者修饰指针类型时,作用不同。
    Typedef int * pint;
    #define PINT int *
     
    Const pint p;//p不可更改,p指向的内容可以更改,相当于 int * const p;
    Const PINT p;//p可以更改,p指向的内容不能更改,相当于 const int *p;或 int const *p;

    pint s1, s2; //s1和s2都是int型指针
    PINT s3, s4; //相当于int * s3,s4;只有一个是指针
  • 相关阅读:
    喜欢的诗
    诗集与集诗
    oracle 12c 中asm元数据是否有所变化
    hdu2066一个人的旅行(dijkstra)
    单链表
    ExtJS4.2学习(7)——基础知识之Reader&Writer篇
    hdu3790最短路径问题 (用优先队列实现的)
    poj 1220 NUMBER BASE CONVERSION(短除法进制转换)
    POJ 4003 Bob’s Race && HDU4123 Bob’s Race (dfs+rmq)
    全排列
  • 原文地址:https://www.cnblogs.com/wanzaiyimeng/p/3277891.html
Copyright © 2020-2023  润新知