教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 高等教育 >

C&C++面试题汇总(9)

来源:网络收集 时间:2026-04-11
导读: p=0x1000000; p+0x200=____; (Ulong)p+0x200=____; (char*)p+0x200=____; 希望各位达人给出答案和原因,谢谢拉 解答:假设在32位CPU上, sizeof(long) = 4 bytes sizeof(char *) = 4 bytes sizeof(short int) = siz

p=0x1000000; p+0x200=____; (Ulong)p+0x200=____; (char*)p+0x200=____;

希望各位达人给出答案和原因,谢谢拉 解答:假设在32位CPU上, sizeof(long) = 4 bytes sizeof(char *) = 4 bytes

sizeof(short int) = sizeof(short) = 2 bytes sizeof(char) = 1 bytes 由于是4字节对齐,

sizeof(struct BBB) = sizeof(*p)

= 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytes (经Dev-C++验证)

p=0x1000000; p+0x200=____;

= 0x1000000 + 0x200*24 (Ulong)p+0x200=____; = 0x1000000 + 0x200 (char*)p+0x200=____; = 0x1000000 + 0x200*4 你可以参考一下指针运算的细节

写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。函数接口为:int find_orderk(const int* narry,const int n,const int k) 要求算法复杂度不能是O(n^2) 谢谢!

可以先用快速排序进行排序,其中用另外一个进行地址查找 代码如下,在VC++6.0运行通过。给分吧^-^ //快速排序

#i nclude usingnamespacestd;

intPartition (int*L,intlow,int high) {

inttemp = L[low]; intpt = L[low]; while (low < high) {

while (low < high && L[high] >= pt) --high;

L[low] = L[high];

while (low < high && L[low] <= pt) ++low;

L[low] = temp; }

L[low] = temp; returnlow;

}

voidQSort (int*L,intlow,int high) {

if (low < high) {

intpl = Partition (L,low,high); QSort (L,low,pl - 1); QSort (L,pl + 1,high); } }

intmain () {

intnarry[100],addr[100]; intsum = 1,t;

cout << \cin >> t; while (t != -1) {

narry[sum] = t; addr[sum - 1] = t; sum++; cin >> t; } sum -= 1;

QSort (narry,1,sum);

for (int i = 1; i <= sum;i++) cout << narry[i] << '\\t'; cout << endl; intk;

cout << \cin >> k; intaa = 1; intkk = 0; for (;;) {

if (aa == k) break;

if (narry[kk] != narry[kk + 1]) { aa += 1; kk++; } }

cout << \cout << \for (i = 0;i < sum;i++) {

if (addr[i] == narry[sum - kk]) cout << i << '\\t'; }

return0; } 1、找错 Void test1() {

char string[10];

char* str1=\

strcpy(string, str1);// 溢出,应该包括一个存放'\\0'的字符string[11] }

Void test2() {

char string[10], str1[10]; for(I=0; I<10;I++) {

str1[i] ='a'; }

strcpy(string, str1);// I,i没有声明。 }

Void test3(char* str1) {

char string[10];

if(strlen(str1)<=10)// 改成<10,字符溢出,将strlen改为sizeof也可以

{

strcpy(string, str1); } } 2.

void g(int**); int main() {

int line[10],i;

int *p=line; //p是地址的地址 for (i=0;i<10;i++) { *p=i;

g(&p);//数组对应的值加1 }

for(i=0;i<10;i++) printf(\return 0; }

void g(int**p) { (**p)++; (*p)++;// 无效 } 输出: 1 2 3 4 5 6 7 8 9 10

3. 写出程序运行结果 int sum(int a) {

auto int c=0; static int b=3; c+=1; b+=2;

return(a+b+c); }

void main() { int I; int a=2;

for(I=0;I<5;I++) {

printf(\} }

// static会保存上次结果,记住这一点,剩下的自己写 输出:8,10,12,14,16, 4.

int func(int a) { int b; switch(a) {

case 1: 30; case 2: 20; case 3: 16; default: 0 }

return b; }

则func(1)=?

// b定义后就没有赋值。 5: int a[3];

a[0]=0; a[1]=1; a[2]=2; int *p, *q; p=a; q=&a[2]; 则a[q-p]=a[2]

解释:指针一次移动一个int但计数为1

…… 此处隐藏:342字,全部文档内容请下载后查看。喜欢就下载吧 ……
C&C++面试题汇总(9).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/608131.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)