在类方法中绝对不能调用实例方法
//A:类方法是指类中被static修饰的方法,无this指针。
delete
// . .* :: ? : sizeof typeid
template
16 调用动态连接库的函数有哪几种方法?
调用一个DLL中的函数有两种方法: 1.载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。 2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了。
17 WM_QUIT消息的用途是什么?一个普通的Windows窗口能收到的最后一条消息是什么?
WM_QUIT是消息队列的消息。其用途是退出消息循环。最后一条消息是WM_QUIT。
#ifndef HEADER_PQUEUE_H
#define HEADER_PQUEUE_H
typedef struct_pqueue{
pitem *items;
int count;
}pqueue_s;
typedef struct_pqueue *pqueue;
typedef struct_pitem{
unsigned char priority[8];
void *data;
struct_pitem *next;
}pitem;
typedef struct_pitem *piterator;
pitem *pitem_new(unsigned char *prio64be,void *data);
void pitem_free(pitem *item);
pqueue pqueue_new(void);
void pqueue_free(pqueue pq);
pitem *pqueue_insert(pqueue pq,pitem *item);
pitem *pqueue_peek(pqueue pq);
pitem *pqueue_pop(pqueue pq);
pitem *pqueue_find(pqueue pq,unsigned char *prio64be);
pitem *pqueue_iterator(pqueue pq);
pitem *pqueue_next(piterator *iter);
int pqueue_size(pqueue pq);
#endif /*! HEADER_PQUEUE_H */
pq_test.c如下:
#include
#include
#include"pqueue.h"
/*remember to change expected.txt if you change there values*/
unsigned char prio1[8]="supercal";
unsigned char prio2[8]="ifragili";
unsigned char prio3[8]="sticexpi";
static void
pqueue_print(pqueue pq)
{
pitem *iter,*item;
iter=pqueue_iterator(pq);
for(item=pqueue_next(&iter);item!=NULL;
item=pqueue_next(&iter)){
printf("item\t%02x%02x%02x%02x%02x%02x%02x%02x\n",
item ->priority[0],item->priority[1],
item ->priority[2],item->priority[3],
item ->priority[4],item->priority[5],
item ->priority[6],item->priority[7],
}
}
int main(void)
{
pitem *item;
pqueue pq;
pq=pqueue_new();
item=pitem_new(prio3,NULL);
pqueue_insert(pq,item);
item=pitem_new(prio1,NULL);
pqueue_insert(pq,item);
item=pitem_new(prio2,NULL);
pqueue_insert(pq,item);
item=pqueue_find(pq,prio1);
fprintf(stderr,"found %p\n",item->priority);
item=pqueue_find(pq,prio2);
fprintf(stderr,"found %p\n",item->priority);
item=pqueue_find(pq,prio3);
fprintf(stderr,"found %p\n",item->priority);
pqueue_print(pq);
for(item=pqueue_pop(pq);item!=NULL;item=pqueue_pop(pq))
pitem_free(item);
pqueue_free(pq);
return 0;
}
pq_test.sh如下:
#!/bin/sh
set -e
./pq_test | cmp $srcdir/pq_expected.txt-
pq_expected.txt如下:
2.请实现 pitem *pqueue_insert(pqueue pq,pitem *item);
腾讯2016研发工程师在线模拟笔试题
1 32位系统中,定义**a[3][4],则变量占用内存空间为()。
4
48
192
12
2 二维数组X按行顺序存储,其中每个元素占1个存储单元。若X[4][4]的存储地址为Oxf8b82140,X[9][9]的存储地址为Oxf8b8221c,则X[7][7]的存储地址为()。
Oxf8b821c4
Oxf8b821a6
Oxf8b82198
Oxf8b821c0
x[4][4]这个元素的地址是Oxf8b82140,则 x[4][9]的地址是Oxf8b82140+5= Oxf8b82145,它与x[9][9这个元素刚好差5行,所以每行的元素个数为{ Oxf8b8221c- Oxf8b82145)/5=d7(十进制245)/5=43,所以x[]7[9]的地址是x[4][9]+3*43(十六进制81)= Oxf8b821c6,x[7][7]的地址=x[7][9-2]= Oxf8b821c4
3 线性表的长度为10,在最坏情况下,冒泡排序需要比较次数为()。
40
42
44
45
4 下面函数的时间复杂度是
long foo(long x){
if(x<2) return 1;
return x*x*foo(x-1);
}
O(N)
O(N^2)
O(N^2)
o(N!)
5 22个顶点的连通图中边的条数至少为()
18
20
21
23
#include
int inc(int a)
{
return (++a);
}
int multi(int *a,int *b,int *c)
{
return (*c=*a* *b);
}
typedef int (FUNC1)(int in);
typedef int (FUNC2)(int*,int*,int*);
void show(FUNC2 fun,int arg1,int *arg2)
{
FUNC1 p=&inc;
int temp=p(arg1);
fun(&temp,&arg1,arg2);
printf("%d\n",*arg2);
}
int main()
{
int a;
show(multi,10,&a);
return 0;
}
100
#include
void add(int *p)
{
(*p)++;
printf("%d",*p);
if (*p>5)
{
return;
}
add(p);
}
int main()
{
int i=0;
add(&i);
return 0;
}
12345