[牛客网]错题整理(1)
来源:互联网 发布:mac office 登陆激活 编辑:程序博客网 时间:2024/06/06 06:50
牛客网错题集(1)
1.int main(int argc ,char** argv)
{
int n = 9, i;
for (i = 1; i<argc; i++)
n = n * 10 + *argv[i] - '0';
printf("%d\n", n);
return 0;
}
经编译连接生成的可执行文件 tt.exe 。若执行输入以下命令行 tt 12 345 678 ,则程序运行的输出结果是()
答案:9136
解析:输入tt 12 345 678时,argc == 4
argv == {“tt”, "12", "345", "678"}
*argv[i]分别取了 1, 3,6
for循环后,得到9136
2.代码可以通过编译吗?如果不能应该如何修改?
template<class T> class Foo{
T tVar;
public:
Foo(T t) : tVar(t) { }
};
template<class T> class FooDerived:public Foo<T>
{
};
int main()
{
FooDerived<int> d(5);
return 0;
}
答案:编译错误,可以在FooDerived类中添加一个构造函数解决问题。
解析:当基类构造函数需要外部传递参数才能进行初始化时,派生类必须显式定义构造函数,为基类传递参数;基类如果不需要传递或者可以不传递参数,派生类可以不用显式定义构造函数。
3.下面是一段c程序:
void foo(int b[][3])
{
++b;
b[1][1]=9;
}
void main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
foo(a);
printf(“%d”,a[2][1]);
}
这段程序的输出是()
答案:9
解析:数组传递了首地址,b[0][0]指向数组a[0][0],但是执行++b后,b[0][0]指向a[1][0],因此b[1][1]就是a[2][1],b[1][1]=9即a[2][1]=9。
4.turbo c环境下,下面程序运行的结果是()
int main()
{
printf("\n");
int a[5] = {1, 2, 3, 4, 5};
int *p, **k;
p = a;
k = &p;
printf("%d", *(p++));
printf("%d", **k);
return 0;
}
答案:12
解析:程序首先定义了一个一维数组a,赋其初值,并定义一个同类型的指针变量p和一个指向指针的指针变量k,然后让指针变量p指向数组的首地址,接着将指针变量p的地址值赋给指向指针的指针变量k。在第一条输出语句中,首先我们需要弄清楚*(p++)的作用,它是先调用指针变量p的值,然后使其自加,输出效果等价于*p,因此,最后输出的结果是数组中的第一个元素。在第二条输出语句中,我们需要弄明白**k的作用,指向指针的指针变量类似于指针变量,如果用**k表示一个数值,可以确定这条输出语句的输出结果是一个数值,而非地址,从表达式k=&p可以看出,k的值是指针变量p的地址值,p的值改变后,k能实时得到改变,那么在第一条输出语句对p的改变,在第二条输出语句中得到了体现。因此,**k输出的是数组中的第二个元素.
- [牛客网]错题整理(1)
- 错题整理1
- [牛客网]错题整理(2)
- [牛客网]错题整理(3)
- [牛客网]错题整理(4)
- [牛客网]错题整理(7)
- [牛客网]错题整理(5)
- [牛客网]错题整理(6)
- [牛客网]错题整理(8)
- 错题整理之网络(二)
- 错题整理-数据结构(绪论)
- 第一阶段错题整理
- 错题整理
- 错题整理
- 百度笔试题1(个人整理)
- 笔试题整理(1)
- 笔试题整理1
- 笔试题整理1
- 栈的压入、弹出序列
- 【图论经典题】游戏机器人
- xamp折腾记
- 【JAVA学习】——drp错误
- qq登陆及获取头像信息
- [牛客网]错题整理(1)
- 05.17 http服务及DNS解析
- matlab之断点调试与单步调试
- greenplum-db-5.0.0-beta.3-rhel6-x86_64
- 【爬虫学习笔记01】基于miniconda的scrapy安装
- 从上往下打印二叉树
- 深入理解数据库中索引的底层实现
- MySQL查询指定时间的数据
- 驱动框架4——在内核中添加或去除某个驱动