由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 一道很奇怪的面试题
相关主题
C++指针问题 int (*) [10]C 里面有办法永久改变一个指针的属性吗?
大家新年好。 请教一个 c interview question问个c++ struct和指针问题
JHQ的一道指针题。关于C++中const的问题
数组问题[合集] 再论auto_ptr/SmartPtr和内存泄漏
谁给解释一下这个c questionC++函数里什么时候传入指针的引用和传入指针是不一样的?
请问c++里empty class的问题C++一问
int *a [] 和int (*a)[] 一样吗一个C的void指针的问题
C# 的不定长度的ARRAY?在子函数内开内存,返回主函数指针然后释放空间是不是很糟糕的(转载)
相关话题的讨论汇总
话题: 数组话题: int话题: getptr话题: array话题: 函数
进入Programming版参与讨论
1 (共1页)
p*****y
发帖数: 1049
1
题目是这样的 首先给出一个函数 int * getptr() {int * a[8]; return a;}
这个函数显然是错的,看不懂的就不要往下看了,因为下面更麻烦
然后题目让写出正确的形式。这当然没有问题,但是题目又说必须用C,不能用C++,
这也没有问题。但是题目又变态的要求还要在函数里额外提供一个数组,这个数组存储
的是 ID * 指针。其中struct ID 是一个自定义的结构。这个数组的大小通过一个函数
int num()实现,这个函数只能被getptr()调用。
我很困惑,因为一个函数是不能返回两个变量的。这样就必须在argument里面提供
reference,但是注意reference是不可以的,必须用指针来实现,所以我的interface就是
int * getptr(ID** *ptr_array, int * num_of_array);
第二个变量就是提供数组的尺寸。
我突然想到一个很不可思议的方法,就是能不能保留int* getptr()的形式,然后将额外
的数组与int数组合并成一个统一的int数组,当然需要转化 int a[i]=(int) ID_ptr ?
这个合并的数组某一个元素就是额外数组的尺寸? 这样做的理论依据就是int 和指针
都占据4 byte
题目最后要求另外写一个函数,这个函数调用getptr(),打印所有数组元素。
请问谁能提供一个更好的办法?或者评论一下我的办法? 谢谢!
a9
发帖数: 21638
2
你还是贴一下原题吧。

就是

【在 p*****y 的大作中提到】
: 题目是这样的 首先给出一个函数 int * getptr() {int * a[8]; return a;}
: 这个函数显然是错的,看不懂的就不要往下看了,因为下面更麻烦
: 然后题目让写出正确的形式。这当然没有问题,但是题目又说必须用C,不能用C++,
: 这也没有问题。但是题目又变态的要求还要在函数里额外提供一个数组,这个数组存储
: 的是 ID * 指针。其中struct ID 是一个自定义的结构。这个数组的大小通过一个函数
: int num()实现,这个函数只能被getptr()调用。
: 我很困惑,因为一个函数是不能返回两个变量的。这样就必须在argument里面提供
: reference,但是注意reference是不可以的,必须用指针来实现,所以我的interface就是
: int * getptr(ID** *ptr_array, int * num_of_array);
: 第二个变量就是提供数组的尺寸。

m*******l
发帖数: 12782
3
思想是对的,但是int, 指针大小不一定完全一样大吧,(当然大多数情况下一样)
一般是放在-1处好像

就是

【在 p*****y 的大作中提到】
: 题目是这样的 首先给出一个函数 int * getptr() {int * a[8]; return a;}
: 这个函数显然是错的,看不懂的就不要往下看了,因为下面更麻烦
: 然后题目让写出正确的形式。这当然没有问题,但是题目又说必须用C,不能用C++,
: 这也没有问题。但是题目又变态的要求还要在函数里额外提供一个数组,这个数组存储
: 的是 ID * 指针。其中struct ID 是一个自定义的结构。这个数组的大小通过一个函数
: int num()实现,这个函数只能被getptr()调用。
: 我很困惑,因为一个函数是不能返回两个变量的。这样就必须在argument里面提供
: reference,但是注意reference是不可以的,必须用指针来实现,所以我的interface就是
: int * getptr(ID** *ptr_array, int * num_of_array);
: 第二个变量就是提供数组的尺寸。

p*****y
发帖数: 1049
4
原题被收回,我记不住具体的内容,如果你什么地方不清楚我可以补充

【在 a9 的大作中提到】
: 你还是贴一下原题吧。
:
: 就是

a9
发帖数: 21638
5
关键人家没要求你返回两个变量吧?

【在 p*****y 的大作中提到】
: 原题被收回,我记不住具体的内容,如果你什么地方不清楚我可以补充
p*****y
发帖数: 1049
6
我定义了一个global 变量,他说不行,不能这样
我就傻了,看样子他是铁心让我返回点东西

【在 a9 的大作中提到】
: 关键人家没要求你返回两个变量吧?
a9
发帖数: 21638
7
不就是返回那个struct ID *吗?
我觉得可能你理解错的可能比较大。

【在 p*****y 的大作中提到】
: 我定义了一个global 变量,他说不行,不能这样
: 我就傻了,看样子他是铁心让我返回点东西

p*****y
发帖数: 1049
8
一点也没有理解错,他让我写出正确的形式(是返回int*正确的形式),然后明确说in
addition,让我提供一个格外的数组
a9
发帖数: 21638
9
如果必须是一个return,可能就得再定义一个4维指针数组,分别放这两个数组的大小
和指针了。
或者你自己再定义个结构,返回去。

in

【在 p*****y 的大作中提到】
: 一点也没有理解错,他让我写出正确的形式(是返回int*正确的形式),然后明确说in
: addition,让我提供一个格外的数组

p*****y
发帖数: 1049
10
我也希望理解错误,如果有人能指出来,非常感谢
但是我的理解应该是没有错的,他的意思就是让我返回两者,怎么返回不清楚
我回忆一下, 他好像这么说的:should return a "array of ints" and "array of
structs"

【在 a9 的大作中提到】
: 不就是返回那个struct ID *吗?
: 我觉得可能你理解错的可能比较大。

相关主题
请问c++里empty class的问题C 里面有办法永久改变一个指针的属性吗?
int *a [] 和int (*a)[] 一样吗问个c++ struct和指针问题
C# 的不定长度的ARRAY?关于C++中const的问题
进入Programming版参与讨论
p*****y
发帖数: 1049
11
不好意思,我忘了说了,他好像说过Maintain the same "int *" return type which
returns a pointer to fixed sized array of ints. 这样的话

【在 a9 的大作中提到】
: 如果必须是一个return,可能就得再定义一个4维指针数组,分别放这两个数组的大小
: 和指针了。
: 或者你自己再定义个结构,返回去。
:
: in

d**********x
发帖数: 4083
12
你后面的想法应该差不多是对的,也没什么不可思议的
总之就是开辟一块buffer,每次动态开辟还是存个静态的根据你的需求确定
然后这块buffer的头上写上int*数组的大小、ID*数组的大小,然后int*数组的内容,
ID*数组的内容
pointer长度什么的都可以忽略,c里面就是一顿乱cast

which

【在 p*****y 的大作中提到】
: 不好意思,我忘了说了,他好像说过Maintain the same "int *" return type which
: returns a pointer to fixed sized array of ints. 这样的话

d****i
发帖数: 4809
13
如果只是要返回数组大小的话,可以这样吧:
void getptr(struct ID **ptr_array, int * num_of_array)
{
// some code here
*num_of_array = num();
}
In calling function:
struct ID *array[10];
int length;
getptr(array, &length);
这里假设num()是如下定义:
int num()
{
return sizeof(array)/sizeof(struct ID *);
}

就是

【在 p*****y 的大作中提到】
: 题目是这样的 首先给出一个函数 int * getptr() {int * a[8]; return a;}
: 这个函数显然是错的,看不懂的就不要往下看了,因为下面更麻烦
: 然后题目让写出正确的形式。这当然没有问题,但是题目又说必须用C,不能用C++,
: 这也没有问题。但是题目又变态的要求还要在函数里额外提供一个数组,这个数组存储
: 的是 ID * 指针。其中struct ID 是一个自定义的结构。这个数组的大小通过一个函数
: int num()实现,这个函数只能被getptr()调用。
: 我很困惑,因为一个函数是不能返回两个变量的。这样就必须在argument里面提供
: reference,但是注意reference是不可以的,必须用指针来实现,所以我的interface就是
: int * getptr(ID** *ptr_array, int * num_of_array);
: 第二个变量就是提供数组的尺寸。

p*****y
发帖数: 1049
14
我总觉得挺危险的,是不是所有的指针都是4比特?

【在 d**********x 的大作中提到】
: 你后面的想法应该差不多是对的,也没什么不可思议的
: 总之就是开辟一块buffer,每次动态开辟还是存个静态的根据你的需求确定
: 然后这块buffer的头上写上int*数组的大小、ID*数组的大小,然后int*数组的内容,
: ID*数组的内容
: pointer长度什么的都可以忽略,c里面就是一顿乱cast
:
: which

a9
发帖数: 21638
15
跟指针几比特没关系吧。

容,

【在 p*****y 的大作中提到】
: 我总觉得挺危险的,是不是所有的指针都是4比特?
d**********x
发帖数: 4083
16
32位系统上正常点的编译器都是 4 BYTE
但是现在64位系统已经很流行了
玩c不就是玩这套东西嘛,没什么危险的。。。

【在 p*****y 的大作中提到】
: 我总觉得挺危险的,是不是所有的指针都是4比特?
p*****y
发帖数: 1049
17
注意,题目要求保留int* 作为返回
必须返回数组

【在 d****i 的大作中提到】
: 如果只是要返回数组大小的话,可以这样吧:
: void getptr(struct ID **ptr_array, int * num_of_array)
: {
: // some code here
: *num_of_array = num();
: }
: In calling function:
: struct ID *array[10];
: int length;
: getptr(array, &length);

p*****y
发帖数: 1049
18
不好意思,我没看懂sizeof(array)是什么意思
题目要求返回数组,signature的返回值必须是int*

【在 d****i 的大作中提到】
: 如果只是要返回数组大小的话,可以这样吧:
: void getptr(struct ID **ptr_array, int * num_of_array)
: {
: // some code here
: *num_of_array = num();
: }
: In calling function:
: struct ID *array[10];
: int length;
: getptr(array, &length);

d****i
发帖数: 4809
19
我觉得你这个题目出的有问题,或者你可能记错了,local stack variable的地址不能
作为返回值。

【在 p*****y 的大作中提到】
: 不好意思,我没看懂sizeof(array)是什么意思
: 题目要求返回数组,signature的返回值必须是int*

p*****y
发帖数: 1049
20
题目第一题是让找错
就是错的

【在 d****i 的大作中提到】
: 我觉得你这个题目出的有问题,或者你可能记错了,local stack variable的地址不能
: 作为返回值。

相关主题
[合集] 再论auto_ptr/SmartPtr和内存泄漏一个C的void指针的问题
C++函数里什么时候传入指针的引用和传入指针是不一样的?在子函数内开内存,返回主函数指针然后释放空间是不是很糟糕的(转载)
C++一问请教 C/C++ 指向多维数组的指针的问题
进入Programming版参与讨论
l*********o
发帖数: 3091
21
就是考你malloc,不让用C++,就是别写成new
l*********s
发帖数: 5409
22
我觉的就是模拟下malloc的工作方式吧,int * 指向数组大小,后面接龙数组。
a****l
发帖数: 8211
23
the original question is not necessarily wrong. As long as you understand
what you are doing, it could be perfectly fine and powerful.

就是

【在 p*****y 的大作中提到】
: 题目是这样的 首先给出一个函数 int * getptr() {int * a[8]; return a;}
: 这个函数显然是错的,看不懂的就不要往下看了,因为下面更麻烦
: 然后题目让写出正确的形式。这当然没有问题,但是题目又说必须用C,不能用C++,
: 这也没有问题。但是题目又变态的要求还要在函数里额外提供一个数组,这个数组存储
: 的是 ID * 指针。其中struct ID 是一个自定义的结构。这个数组的大小通过一个函数
: int num()实现,这个函数只能被getptr()调用。
: 我很困惑,因为一个函数是不能返回两个变量的。这样就必须在argument里面提供
: reference,但是注意reference是不可以的,必须用指针来实现,所以我的interface就是
: int * getptr(ID** *ptr_array, int * num_of_array);
: 第二个变量就是提供数组的尺寸。

m********5
发帖数: 17667
24
这不是很常用的东西么
以前给matlab写mex的时候用得一堆一堆的
int *指向array大小,后面接一堆进行了

就是

【在 p*****y 的大作中提到】
: 题目是这样的 首先给出一个函数 int * getptr() {int * a[8]; return a;}
: 这个函数显然是错的,看不懂的就不要往下看了,因为下面更麻烦
: 然后题目让写出正确的形式。这当然没有问题,但是题目又说必须用C,不能用C++,
: 这也没有问题。但是题目又变态的要求还要在函数里额外提供一个数组,这个数组存储
: 的是 ID * 指针。其中struct ID 是一个自定义的结构。这个数组的大小通过一个函数
: int num()实现,这个函数只能被getptr()调用。
: 我很困惑,因为一个函数是不能返回两个变量的。这样就必须在argument里面提供
: reference,但是注意reference是不可以的,必须用指针来实现,所以我的interface就是
: int * getptr(ID** *ptr_array, int * num_of_array);
: 第二个变量就是提供数组的尺寸。

1 (共1页)
进入Programming版参与讨论
相关主题
在子函数内开内存,返回主函数指针然后释放空间是不是很糟糕的(转载)谁给解释一下这个c question
请教 C/C++ 指向多维数组的指针的问题请问c++里empty class的问题
指针的大小是 4 byte还是有赖于系统?int *a [] 和int (*a)[] 一样吗
琢磨了一下c++ smart pointer,发现不能到处用C# 的不定长度的ARRAY?
C++指针问题 int (*) [10]C 里面有办法永久改变一个指针的属性吗?
大家新年好。 请教一个 c interview question问个c++ struct和指针问题
JHQ的一道指针题。关于C++中const的问题
数组问题[合集] 再论auto_ptr/SmartPtr和内存泄漏
相关话题的讨论汇总
话题: 数组话题: int话题: getptr话题: array话题: 函数