Redian新闻
>
谁会让自己的老婆吃紧急避孕药呢?
avatar
谁会让自己的老婆吃紧急避孕药呢?# Love - 情爱幽幽
n*n
1
昨天早晨电面BB,no luck.
主要是对印度人的口音还是有些不习惯,而且不明原因昨天有一段时间电话背景噪音非
常大,非常影响面试。
题目如下:
1. 打印Hello World字符串。这题看起来简单,但是如果概念不清,很容易弄错或者绕
很久。
回忆了一下,回头又编了一次,代码应该是
void foo(char** a){
*a = "hello world";
}
int main(){
char* c;
foo(&c);
printf("%s",c);
return 0;
}
这题的trap就在char* c之后,只是声明了c但并没有定义c。如果用debugger trace,就
会发现&c = 0x0012ff40但是c是一个bad pointer,即里面是garbage value, 这时候如
果直接用foo(c),编译器会提示错误: the variable "c" can't be used without
definition. 这和下面这段程序是一个道理:
void bar(int a){
cout << a << endl;
}
int main(){
int c;
bar(c); // can't do this! c has garbage value now.
return 0;
}
这里面的原因就在于c是在栈上生成的,所以系统给的是garbage value, 不是默认值0.
所以唯一的办法 就是把c本身的地址传进foo,即把foo写成void foo(char** c), 在
main里调用foo(&c).希望版上的各位看了以后 不要和我犯一样的错误!
第二题以后就简单了。
2. c中static的用法。
3. oo design: how to design a car (wheels, steer, engine, number of seats...)
4. c++ polymorphism
5. what is dynamic binding? how is it implemented with vptr and vtbl?
6. 5 gallon bottle and 3 gallon bottle -> how to get 4 gallon warter?
早晨就受到了thank you letter, 被bb发了好人卡,版上各位继续加油!
avatar
c*e
2
看电视,一个紧急避孕药的广告,我随口说了句你看看人家夫妻感情多好多缠绵,我老
公在旁边幽幽地说了句:那不是夫妻。
我还说他思想怎么那么阴暗,夫妻怎么就不能缠绵了,非得是别的不正当关系?他答:
谁会让自己老婆吃紧急避孕药?
他说完就觉得很震惊,后来仔细想想就觉的说得好有道理,紧急避孕药的危害想必大家
也是有目共睹的,据说每年的服用量不能超过三次,忽然觉得老公真是一个好人啊。
但是现在很多人都不在乎这个,紧急避孕药像吃饭一样勤。
我之前在药房上班的时候,旁边有一个酒吧,里面有很多花枝招展的女孩,我不知道她
们是做什么的,但是经常光顾我们药店购买避孕药倒是真的,我还曾经好心提醒过,这
种药吃多伤身体的,每年不能超过三次哦,还有要配合维生素的。但是她们似乎不在乎
这点身体成本。
经常浓妆艳抹的让他们时不时的还会带着几个男的,看起来也是很不好惹的那种,随后
扬长而去,真是很替他们担心,我们两家店距离如此之近,但是感觉就是两个世界一样
,店里永远的白炽灯找的什么都是明亮亮的,没人的时候安静的想要睡着了,可以听见
呼吸声音,但是隔壁确实那样的灯红酒绿,人心繁杂。
avatar
r*s
3
谢谢分享
avatar
c*o
4
Thanks for sharing!
有点没搞清楚,第一题为什么不是从主程序传一个字符串到子程序里打印?

【在 n******n 的大作中提到】
: 昨天早晨电面BB,no luck.
: 主要是对印度人的口音还是有些不习惯,而且不明原因昨天有一段时间电话背景噪音非
: 常大,非常影响面试。
: 题目如下:
: 1. 打印Hello World字符串。这题看起来简单,但是如果概念不清,很容易弄错或者绕
: 很久。
: 回忆了一下,回头又编了一次,代码应该是
: void foo(char** a){
: *a = "hello world";
: }

avatar
i*e
5
void foo(char** a){
*a = "hello world";
}
int main(){
char* c;
foo(&c);
printf("%s",c);
return 0;
}
这个程序有两个错误。
1) *a = "hello world";
This syntax is incorrect. The only exception is during intialization of a C-
style string constant like this: char *a = "hello world"; Note that this is a C-style string constant, if you try to modify the string, the result is undefined.
In this case, you should use strcpy(a, "hello world");
2) c is a pointer to a char. Since it is not initialized, it does not point to anywhere, it might even have an invalid address (ie, address space that's occupied by other processes or the null address 0x0000). You should allocate memory to it, such as malloc or new operator. The other way is use static memory with array (ie, char c[10]).
一些常见面试题的答案与总结 -
http://www.ihas1337code.com

【在 n******n 的大作中提到】
: 昨天早晨电面BB,no luck.
: 主要是对印度人的口音还是有些不习惯,而且不明原因昨天有一段时间电话背景噪音非
: 常大,非常影响面试。
: 题目如下:
: 1. 打印Hello World字符串。这题看起来简单,但是如果概念不清,很容易弄错或者绕
: 很久。
: 回忆了一下,回头又编了一次,代码应该是
: void foo(char** a){
: *a = "hello world";
: }

avatar
l*z
6
r u really on work?

【在 i**********e 的大作中提到】
: void foo(char** a){
: *a = "hello world";
: }
: int main(){
: char* c;
: foo(&c);
: printf("%s",c);
: return 0;
: }
: 这个程序有两个错误。

avatar
g*d
7
第一题可以char* c = NULL吗?
avatar
o*e
8
Sigh...,
Why are so many misleading information here.
You guys really should try it out before post here.
char* c;
is not a "declare" in this case, it is a definition.
since the stack will allocate 4bytes(8bytes for 64bit machine) for it.
And you don't have to initialize this pointer if you decide to give it a
value in foo().
#include
#include
void foo(char** a){
static char A[20] = "hello world";
*a = A;
}
int main(){
char* c;
foo(&c);
printf("%s",c);
return 0;
}

【在 i**********e 的大作中提到】
: void foo(char** a){
: *a = "hello world";
: }
: int main(){
: char* c;
: foo(&c);
: printf("%s",c);
: return 0;
: }
: 这个程序有两个错误。

avatar
g*d
9
Isn't string "Hello World" on foo's stack and it gets deallocated as soon as
foo is done?

【在 o*****e 的大作中提到】
: Sigh...,
: Why are so many misleading information here.
: You guys really should try it out before post here.
: char* c;
: is not a "declare" in this case, it is a definition.
: since the stack will allocate 4bytes(8bytes for 64bit machine) for it.
: And you don't have to initialize this pointer if you decide to give it a
: value in foo().
: #include
: #include

avatar
g*d
10
Nevermind, I didn't see your static keyword.

as

【在 g********d 的大作中提到】
: Isn't string "Hello World" on foo's stack and it gets deallocated as soon as
: foo is done?

avatar
s*k
11
我怎么觉得这个没问题啊,你用的是GCC?C确实是bad ptr,但是你传的是指向指针的
指针&C,这个就没问题了。虽然可能不是很严谨,高手看看对不对

【在 n******n 的大作中提到】
: 昨天早晨电面BB,no luck.
: 主要是对印度人的口音还是有些不习惯,而且不明原因昨天有一段时间电话背景噪音非
: 常大,非常影响面试。
: 题目如下:
: 1. 打印Hello World字符串。这题看起来简单,但是如果概念不清,很容易弄错或者绕
: 很久。
: 回忆了一下,回头又编了一次,代码应该是
: void foo(char** a){
: *a = "hello world";
: }

avatar
L*e
12
这个程序没有问题。
1) pass address of pointer.
2) "hello world" is string literal, which is statically allocated; therefore
it is safe to return from a function.
I was asked same question from different aspect in an interview:
what is the output the following program:
void test( char *p )
{
p = new char[10];
memset(p, 'A', 10);
}
int main()
{
char *k;
test(k);
cout << k << endl;
return 0;
}
avatar
b*h
13
我觉得楼主的概念不清,楼上的一些回答也有误导。这段程序没有问题,只不过foo里
面有一个类型转化的warning罢了。
*a = "hello world";
从string constant到char*. "hello world"是string literal,既不在栈上,也不在
堆上,而在静态的数据区。
char* c; 既是声明又是定义,只不过值是垃圾罢了。
avatar
a*4
14
我用VS2010测试了一下,楼主的code没问题
"hello world"不是C-Style string, 而是string literals所以
*a = "hello world"是合法的
avatar
s*y
15
The hello world program is OK. But unnecessarily long.
The whole problem is that you make even the simplest things complicated.
This means you don't have a good understanding of the language or with
little experience. This line of code does it all:
printf("%s\n", "Hello World");

【在 n******n 的大作中提到】
: 昨天早晨电面BB,no luck.
: 主要是对印度人的口音还是有些不习惯,而且不明原因昨天有一段时间电话背景噪音非
: 常大,非常影响面试。
: 题目如下:
: 1. 打印Hello World字符串。这题看起来简单,但是如果概念不清,很容易弄错或者绕
: 很久。
: 回忆了一下,回头又编了一次,代码应该是
: void foo(char** a){
: *a = "hello world";
: }

avatar
z*n
16
我也忍了半天没说。。。这题为啥直接打印hello world不行,要整那么复杂?面试官要
求的?

【在 s*y 的大作中提到】
: The hello world program is OK. But unnecessarily long.
: The whole problem is that you make even the simplest things complicated.
: This means you don't have a good understanding of the language or with
: little experience. This line of code does it all:
: printf("%s\n", "Hello World");

avatar
s*y
17
Usually when you pass a pointer, you would expect the content pointed to
by the pointer will be modified.
In your case, the pointer itself got changed, which doesn't make a
difference. Either do a return assignment instead of passing in as
argument or pass in a pointer to the pointer.

therefore
void test( char *p )
{
p = new char[10];
memset(p, 'A', 10);
}
int main()
{
char *k;
test(k);
cout << k << endl;
return 0;
}

【在 L*******e 的大作中提到】
: 这个程序没有问题。
: 1) pass address of pointer.
: 2) "hello world" is string literal, which is statically allocated; therefore
: it is safe to return from a function.
: I was asked same question from different aspect in an interview:
: what is the output the following program:
: void test( char *p )
: {
: p = new char[10];
: memset(p, 'A', 10);

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。