![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 50
C-now-s
这个作者很懒,什么都没留下…
展开
-
共享库
注:组成共享库的目标文件,在编译时需要加-fPIC选项,例如:$ gcc -c -fPICstack/stack.h-f 后跟一些编译选项,PIC表示position Independent Code(位置无关代码);区别:加了-fPIC的共享库,其各段的加载地址并没有定死,可以加载到任意位置,因为指令中的地址都是相对ebx的,没有使用绝对地址,只要根据实际的家在地址修在ebx就好了。原创 2013-09-29 15:50:48 · 665 阅读 · 0 评论 -
包含头文件时<>与“”的区别
包含头文件时例:#include 用角括号,则gcc首先查找-I选项指定的目录,然后查找系统的头文件目录;#include"stack.h" 则首先查找被处理的#include指示所在的当前文件所在的目录,然后查找-I,最后系统的头文件。注:-I选项可以指定相对路径也可以指定绝对路径,如果指定相对路径,她是相对于gcc进程当前工作目录的路径,而不是相对于正在被处理的#inc原创 2013-09-29 10:27:18 · 1055 阅读 · 0 评论 -
链接共享库和链接静态库的区别
链接共享库和链接静态库的区别链接libc共享库时:连接器只是确认可执行文件main引用的某些符号在libc中有定义,并没有最终确定这些符号的地址,这些符号在可执行文件main中仍然是未定义的符号,要在运行时动态链接;链接静态库时:连接器会把静态库中的文件取出,与可执行文件真正连接在一起。优点:1)链接时,只取出需要的目标文件进行连接,不需要的目标文件可以不链接。 2)原创 2013-09-29 11:30:15 · 1115 阅读 · 0 评论 -
《算法导论》习题6.4-3
第80页6.4-3对一个其所有n个元素已按増序排列的数组A, 堆排列的运行时间是多少?若A的元素成降序排列呢? 如果是已按递增顺序排列,在建堆的时候需要O(n),而在堆排序的时候需要O(nlgn),所以递增顺序排列的话,仍然需要O(nlgn).如果按照递减的顺序排列,在建堆的时候需要O(1),在堆排序的时候仍然需要O(nlgn),故在这两种情况下,算法需要的时间都是O(nlgn)。原创 2013-10-15 18:51:04 · 1991 阅读 · 0 评论 -
strlen与sizeof的区别
一、strlenstrlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。char aa[10];coutchar aa[10]={'\0'}; coutchar aa[10]="jun"; cout而sizeof()返回的是变原创 2013-10-15 21:10:37 · 730 阅读 · 0 评论 -
一个人,花8元买只鸡。9元卖出去。10元买回来、11元在卖出去。请问他赚了多钱?
解析: 这个题目有点混,宝马公司的答案用了强盗逻辑加错误算法得出-2元。错误算法: 整个事件有3次交易,我门来看看具体是哪3次? 第一次交易:8元买进,9元卖出,利润1元; 第二次交易:9元卖出,10元买进,利润-1元; 第三次交易:10元买进,11元卖出利润1元; 整个过程:1-1+1=1元 它忘了第三次的交易卖11元,是补上追加成本的1元,又赚一块,加之前的一块,原创 2013-10-15 21:26:04 · 2600 阅读 · 0 评论 -
写一个函数,判断一个int型的正整数是否是2的幂,即是否可以表示成2^X的形式(不可以用循环)
参考答案://只考虑a大于0的情形//返回1,表示a为2的幂//返回0, 表示a不是2的幂int is2n(int a){ return (((~a + 1) & a) == a);}例如: 1.对于整数8,判断过程如下: 二进制 : 1000 ~a : 011原创 2013-10-15 21:35:40 · 1467 阅读 · 0 评论 -
Google面试题 数组中第K小的数字
题目1534:数组中第K小的数字时间限制:2 秒内存限制:128 兆特殊判题:否提交:682解决:105题目描述:给定两个整型数组A和B。我们将A和B中的元素两两相加可以得到数组C。譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6]。现在给你数组A和B,求由A和B两两相加得到的数组C中,第K小的数字。转载 2013-10-15 22:18:31 · 877 阅读 · 0 评论 -
八皇后问题
1.引子 中国有一句古话,叫做“不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地往前走,每走一步都更靠近目标结果一些,直到遇到障碍物,我们才考虑往回走。然后再继续尝试向前。通过这样的波浪式前进方法,最终达到目的地。当然整个过程需要很多往返,这样的前进方式,效率比较低下。2.适用范围原创 2013-10-16 11:03:43 · 1108 阅读 · 2 评论 -
linux程序迁移至windows,老有问题
linux程序迁移至windows,老有问题,未声明的标识符?但是明明定义过该结构体的头文件已经包含在内,求大神么赐教~~~原创 2013-11-06 09:00:48 · 1128 阅读 · 2 评论 -
Union与Struct的区别
1. 共用体声明和共用体变量定义 共用体(参考“共用体”百科词条)是一种特殊形式的变量,使用关键字union来定义 共用体(有些人也叫"联合")声明和共用体变量定义与结构体十分相似。其形式为: union 共用体名{ 数据类型 成员名; 数据类型 成员名; ... } 变量名; 共用体表示几个变量共用一个内存位置,在不原创 2013-11-08 20:11:54 · 894 阅读 · 0 评论 -
C语言运算符优先级和口诀
一共有十五个优先级: 1 () [] . ->2 ! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof 3 * / %4 + - 5 >> 6 > >= 7 == != 8 & 9 ^ 10 | 11 &&12 ||13 ?转载 2013-10-10 19:54:01 · 741 阅读 · 0 评论 -
只用一个变量打印出九九乘法表
将一个变量分为两部分,高四位与低四位。则相当于两个变量的效果,再利用双重循环即可~简例如下:int main(){ unsigned char a; for (a=0x10 ; a for (a +=(a>>4) ; (a&0xf) printf("%d*%d=%d ",a>>4,a&0xf,(a>>4)*(a&0xf)原创 2013-10-10 08:55:38 · 1164 阅读 · 0 评论 -
GDB指令——读取符号表
GDB指令——读取符号表-symbols -s 从指定文件file中读取符号表。-se file从指定文件file中读取符号表信息,并把他用在可执行文件中。-core -c 调试时core dump(核心转储)的core文件。-directory -d 加入一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。原创 2013-10-08 09:46:12 · 17996 阅读 · 0 评论 -
如何修改动态库符号表
ELF 文件中代码、连接信息和注释是以节(section)为单位存放的,并存有一个节头表(section header)。对每一节,在节头表中都有一个表项(节头表项)与之对应,表项记录了该节的一些信息,例如该节在文件中的位置信息和该节的字节长度信息。一、ELF 文件和有关术语Unix 系统的可执行文件和动态库文件是以 ELF 格式存放的。为使下面的叙述清晰而没有伎义,先转载 2013-10-08 10:30:42 · 2665 阅读 · 0 评论 -
动态链接库(Linux)
Linux下动态链接库的使用: Linux下使用动态链接库,原程序需要包含dlfcn.h头文件,此文件定义了调用动态链接库的函数的原型。 #include #include //Four functions dlopen(), dlsym(),dlclose(),dlerror() implementing the interface to the dyna原创 2013-10-08 11:38:54 · 675 阅读 · 0 评论 -
如何读取动态链接库中的符号表,并调用
我们知道动态加载的函数库是一类函数库,他可以在程序运行过程中的任何时间加载。它们特别适合在函数中加载一些模块和plugin扩展模块的场合,因 为它可以在当程序需要某个plugin模块时才动态的加载。例如,Pluggable Authentication Modules(PAM) 系统就是用动态加载函数库来使得管理员可以配置和重新配置身份验证信息。 Linux系统下,DL函数库与其他函数原创 2013-10-08 14:49:39 · 5539 阅读 · 0 评论 -
静态链接库
1、静态链接库 在程序执行之前加入到目标程序中去了;实际上就是简单的一个普通的目标文件的集合,一般来说习惯用“.a”作为后缀。优势:1)将程序link起来,而不用重新编译代码,节省了重新编译代码的时间。 2)当想把自己提供的函数给别人使用但又相对函数的源代码进行保密,则可向别人提供一个静态函数库文件。创建一个静态函数库文件,或者往一原创 2013-10-08 18:14:02 · 643 阅读 · 0 评论 -
LINUX下动态链接库的创建
LINUX下动态链接库的创建 在LINUX系统下,创建动态链接库是件很简单的事情。只要在编译函数库源程序时加上-shared选项即可,这样所生成的执行程序即为动态链接库。从某种意义上来说,动态链接库也是一种执行程序。按一般规则,程序名应带.so后缀。下面举个例子。编写两个函数,一个用于查询当前日期getdate,一转载 2013-10-09 09:11:36 · 673 阅读 · 0 评论 -
LINUX下动态链接库的使用
LINUX下动态链接库的使用2.1 重要的dlfcn.h头文件LINUX下使用动态链接库,源程序需要包含dlfcn.h头文件,此文件定义了调用动态链接库的函数的原型。下面详细说明一下这些函数。1.1.1 dlerror原型为: const char *dl转载 2013-10-09 09:16:26 · 907 阅读 · 0 评论 -
静态链接库与动态链接库
一、静态链接库通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file)。程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下。所以这些函数库被成为静态库(static libaray),通常文件名为“libxxx.a”的形原创 2013-10-09 09:31:32 · 835 阅读 · 0 评论 -
形参与实参之间的值传递
先说形参与实参的数值传递: 函数调用时将实参数传递给形参称为参数传递。C语言中,参数的传递方式是“单向值传递”,形参和实参变量各自有不同的存储单元,被调用函数中的形参变量值的变化不会影响实参变量值。举个例子 #include void swap(int x,int y) { int z; z=x;转载 2013-10-09 11:45:20 · 11280 阅读 · 1 评论 -
结构体中的函数指针
在结构体中定义函数指针,然后对其调用(和类调用的方法是一样的~)在调用时对其赋值。#includestruct square{ int weight; int width; int height; int (*add )(int a,int b);};int square_add(int a,int b){ return a原创 2013-10-09 22:01:20 · 749 阅读 · 0 评论 -
结构体在内存中的对齐规则
一个结构体变量定义完之后,其在内存中的存储并不等于其所包含元素的宽度之和。例一: #include using namespace std;转载 2013-11-12 16:38:41 · 914 阅读 · 0 评论