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 *吗? : 我觉得可能你理解错的可能比较大。
|
|
|
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的地址不能 : 作为返回值。
|
|
|
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); : 第二个变量就是提供数组的尺寸。
|