`
jubincn
  • 浏览: 242709 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
文章分类
社区版块
存档分类
最新评论
文章列表
转自:http://www.openfoundry.org/index.php?option=com_content&task=view&id=8325&Itemid=4;isletter=1 2011-05-05 11:02作者是 Rex 我相信絕大部分 Linux 開發者都會告訴你,Driver 的開發比 Linux Application 容易許多,即便寫驅動程式聽起來 ...
注:下面是我自己最近看书的总结,应该有错误 在C++中,如果子类与父类的函数名相同,那么子类将覆盖父类中同名的函数,也就是说,在继承关系中,方法签名只由方法名决定。若想实现多态效果,那么只能使用虚函数来实现。父类中的虚函数可能被编译为一个指针,编译子类时将子类相应的函数地址赋值给那个指针。 我想,继承在向上和向下两个方向起作用: 向上:子类可以使用父类中public和protected的方法和变量,实现代码重用。 向下:父类中的虚函数由不同的子类实现,实现多态。 在这个模型中,容易出问题的地方应该在“覆盖”上。子类对象赋值给父类变量后,执行的是父类中的函数,而不是自身的函数 ...
转自:《高质量C/C++编程指南》 重载与覆盖 成员函数被重载的特征: 相同的范围(在同一个类中); 函数名字相同; 参数不同; virtual 关键字可有可无。 覆盖是指派生类函数覆盖基类函数,特征是: 不同的范围(分别位于派生类与基类); 函数名字相同; 参数相同; 基类函数必须有 virtual 关键字。 注:之前一直将覆盖理解为重载,因此在读书和与他人交流时总感到别扭,原来我犯了这么低级的一个错误 ...
转自:《高质量C/C++编程指南》 几个同名的重载函数仍然是不同的函数,它们是如何区分的呢?我们自然想到函数接口的两个要素: 参数与返回值。 如果同名函数的参数不同(包括类型、顺序不同),那么容易区别出它们是不同的函数。如果同名函数仅仅是返回值类型不同,有时可以区分,有时却不能。例如: void Function(void); intFunction (void); 上述两个函数,第一个没有返回值,第二个的返回值是 int 类型。如果这样调用函数: intx = Function (); 则可以判断出 Function 是第二个函数。问题是在 C++/C ...
两者最大的不同是const指针在内存中有存储空间,有地址,而引用则没有。因此,const指针可以为NULL,而引用不能为NULL。 简而言之,const指针是个指向对象的指针,而引用则是对象自身。 下面内容来自:《高质量C/C++编程指南》 引用的一些规则如下: (1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。 (2)不能有 NULL 引用,引用必须与合法的存储单元关联(指针则可以是 NULL)。(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
首先,sizeof不是一个函数,而是一个操作符。 在C99以前,sizeof是在编译时实现的。编译器在给数组分配空间时会记录下数组所占的空间,因此sizeof只需要向编译器询问数组的大小即可。 http://www.velocityreviews.com/forums/t440955-how-sizeof-works.html http://stackoverflow.com/questions/671790/how-does-sizeofarray-work
转自:《C专家编程》 在C语言中,可以像下面这样声明一个10X20的多维数组: char carrot[10][20]; 或者以更像”数组的数组“的形式进行声明: typedef char vegetable[20]; vegetable carrot[10]; 不论哪种情况,访问单个字符都是通过carrot[i][j]的形式,编译器在编译时会把它解析为**((carrot+i) + j)的形式。
转自:《C专家编程》 用a[i]这样的形式对数组进行访问总是被编译器改写为像”*(p+i)“这样的指针访问。 你可以使用小波形式访问指针,但请尽量限制在指针作为函数参数,而且你知道实际传递给函数的是一个数组。 在作为函数的参数时,数组的声明可以看作一个指针。作为函数参数的数组始终会被编译器修改为指向数组第一个元素的指针。 因此,当把一个数组定义为函数参数时,可以选择把它定义为数组,也可以将其定义为指针。不管哪种方法,在函数内部实际上获得的是一个指针。 在其它所有情况中,定义和声明必须匹配。如果定义了一个数组,在其它文件对它进行声明时也必须把它声明为数组,指针也是如此。
转自:《C专家编程》 非参数指针: int array[10], array2[10]; main(){ array[1] = 3; *array = 3; array = array2; /*失败*/ }指针实参: fun1(int *ptr){ ptr[1] = 3; *ptr = 3; ptr = array2; }数组实参: fun2(int arr[]){ arr[1] = 3; *arr = 3; arr = array2; } 语句array = array2; 将引起一个编译错误,错误信息是“无法修改数组名”。但是 ...
源代码如下: 1 #include <stdio.h> 23 struct CoinPurse{4 | unsigned gold;5 | unsigned silver;6 | unsigned cooper;7 };
Segmentation fault(段错误)是由于虚拟内存管理单元的异常所致,而该异常则通常是由于解引用一个未初始化或非法值的指针引起的。 Linux中提供了core dump的功能,使得对这类错误的调试更为容易。 一般情况下,linux系统是不允许产生core文件的,因此首先要解除这个限制: ulimit -c unlimited 接下来,运行含segmentation fault的段程序,如: ./test 这时,segmentation fault的错误信息会显示为: Segmentation fault (core dumped) 在该文件夹下会出现一个名为core ...
转载自:http://space.itpub.net/14805538/viewspace-483694 void *memset(void *dest, int c, size_t count); 将dest前面count个字符置为字符c. 返回dest的值. void *memmove(void *dest, const void *src, size_t count); 从src复制count字节的字符到dest. 如果src和dest出现重叠, 函数会自动处理. 返回dest的值. void *memcpy(void *dest, con ...
本文以将当前获得的动态ip地址设为固定ip为例 首先,检查现有的ip地址: ifconfig 在etho有这么一行: inet addr:172.20.14.30 Bcast:172.20.14.255 Mask:255.255.255.0 将其记录下来 修改ip地址配置文件: vi /etc/network/interfaces 试用动态ip的配置文件: # The primary network interfaceauto eth0iface eth0 inet dhcp 将其修改为: # The primary network interface iface e ...
我的Ubuntu11.04执行结果: 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) S ...
if ... then语句 if [ test_command ] then commands fi if ... then ... else语句 if [ test_command ] then commands else commands fi if ... then ... elif ... (else)语句 if [ test_command ] then commands elif [ test_command ] then commands ... ... else (optional) comm ...
Global site tag (gtag.js) - Google Analytics