由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 一个C的void指针的问题
相关主题
How to return an array in a C++ function?一道很奇怪的面试题
请问c++中操作符可以声明为虚函数吗?C 里面有办法永久改变一个指针的属性吗?
c++的问题就是用*标识指针,和乘法混了,应该用@替代问个指针array 的简单问题
override operator[] inline[新手]一直都把C++当Java写,有啥严重不妥?
C++指针问题 int (*) [10]包子问使用C templates Sort data的问题
大家来做题C++。c的问题(2)
C++ Q87: What is wrong with this swap function? (转载)《C# 5.0 核心技术》第5版[PDF]
Question about type conversion (转载)其实微软是个做语言的公司
相关话题的讨论汇总
话题: array话题: void话题: mytype话题: int话题: c++
进入Programming版参与讨论
1 (共1页)
d****i
发帖数: 4809
1
C里定义一个函数,用generic pointer void*作为调入参数,如下
void function(void *a, int N)
其中a是一个array,N是array的长度,怎么可以在function中对array a[]进行操作呢
,如果预先不知道calling function中传进来的是int array还是double array还是其
他array? 是否需要另外传进来一个关于array类型的参数?
a****l
发帖数: 8211
2
现在很多的语言不准你做这种事,根本原因就是因为很多人想不通为什么C准许你做这种
事,然后没想通就依样画葫芦照着做,然后就是地球爆炸了.

【在 d****i 的大作中提到】
: C里定义一个函数,用generic pointer void*作为调入参数,如下
: void function(void *a, int N)
: 其中a是一个array,N是array的长度,怎么可以在function中对array a[]进行操作呢
: ,如果预先不知道calling function中传进来的是int array还是double array还是其
: 他array? 是否需要另外传进来一个关于array类型的参数?

p***o
发帖数: 1252
3
也不是不准做,C有macro, C++有template,java有generics

【在 a****l 的大作中提到】
: 现在很多的语言不准你做这种事,根本原因就是因为很多人想不通为什么C准许你做这种
: 事,然后没想通就依样画葫芦照着做,然后就是地球爆炸了.

d****i
发帖数: 4809
4
C里面是怎么做的呢?比如上例中的void *a,如果不传类型的话,在函数中怎么知道
array的类型?

【在 p***o 的大作中提到】
: 也不是不准做,C有macro, C++有template,java有generics
d****p
发帖数: 685
5
He mentioned macro for C.
Sth like:
#define PROCESS_ARRAY(T,p,n) {\
T* p2 = p;\
int i;\
for (i = 0; i < n; ++i)\
printf("%d", p2[i];\
}
in your code...
typedef int MyType;
MyType a[] = {1,2,3};
PROCESS_ARRAY(MyType, a, sizeof(a)/sizeof(MyType))

【在 d****i 的大作中提到】
: C里面是怎么做的呢?比如上例中的void *a,如果不传类型的话,在函数中怎么知道
: array的类型?

p***o
发帖数: 1252
6
嗯,差不多,就是BS在C++ D&E里谈到的原始的template。另外也可以把
函数指针用进去,就像qsort这个C库函数那样。不过用C写费力不讨好,
用C++方便很多。

【在 d****p 的大作中提到】
: He mentioned macro for C.
: Sth like:
: #define PROCESS_ARRAY(T,p,n) {\
: T* p2 = p;\
: int i;\
: for (i = 0; i < n; ++i)\
: printf("%d", p2[i];\
: }
: in your code...
: typedef int MyType;

d****i
发帖数: 4809
7
qsort这个函数的参数中还是有size_t size这样的参数来表示输入array的元素大小,
但是象我一开始举的例子那样没有表示每个元素大小的参数
void function(void *a, int N)
{
int i;
for(i=0;i printf("%a",a[i]);
}
这样做是错的,因为void pointer不可以被dereferencing,必须cast成相应的类型才可
以,在没有传入size_t size的情况下怎么做呢?(假设不能用Macro)

【在 p***o 的大作中提到】
: 嗯,差不多,就是BS在C++ D&E里谈到的原始的template。另外也可以把
: 函数指针用进去,就像qsort这个C库函数那样。不过用C写费力不讨好,
: 用C++方便很多。

d****p
发帖数: 685
8
这样可能无解。

【在 d****i 的大作中提到】
: qsort这个函数的参数中还是有size_t size这样的参数来表示输入array的元素大小,
: 但是象我一开始举的例子那样没有表示每个元素大小的参数
: void function(void *a, int N)
: {
: int i;
: for(i=0;i: printf("%a",a[i]);
: }
: 这样做是错的,因为void pointer不可以被dereferencing,必须cast成相应的类型才可
: 以,在没有传入size_t size的情况下怎么做呢?(假设不能用Macro)

d****p
发帖数: 685
9
多说一句个人体会。
宏可以主要用来省敲字:我很爱用##操作符。不过要干净还是多用模板吧。如果考虑函
数指针,不如考虑函数对象体更C++一些。

【在 p***o 的大作中提到】
: 嗯,差不多,就是BS在C++ D&E里谈到的原始的template。另外也可以把
: 函数指针用进去,就像qsort这个C库函数那样。不过用C写费力不讨好,
: 用C++方便很多。

p***o
发帖数: 1252
10
有时候人不让你用C++,只好用宏+函数指针了 ...

【在 d****p 的大作中提到】
: 多说一句个人体会。
: 宏可以主要用来省敲字:我很爱用##操作符。不过要干净还是多用模板吧。如果考虑函
: 数指针,不如考虑函数对象体更C++一些。

相关主题
大家来做题C++。一道很奇怪的面试题
C++ Q87: What is wrong with this swap function? (转载)C 里面有办法永久改变一个指针的属性吗?
Question about type conversion (转载)问个指针array 的简单问题
进入Programming版参与讨论
t*******t
发帖数: 105
11
java genrics 对于int double 能work吗?

【在 p***o 的大作中提到】
: 也不是不准做,C有macro, C++有template,java有generics
p***o
发帖数: 1252
12
我不懂java,看过一些早先的介绍里要拿个类box一下。

【在 t*******t 的大作中提到】
: java genrics 对于int double 能work吗?
g*****g
发帖数: 34805
13
It's autobox/unbox.

【在 p***o 的大作中提到】
: 我不懂java,看过一些早先的介绍里要拿个类box一下。
w*********l
发帖数: 1337
14
谁说用C费力不讨好?

【在 p***o 的大作中提到】
: 嗯,差不多,就是BS在C++ D&E里谈到的原始的template。另外也可以把
: 函数指针用进去,就像qsort这个C库函数那样。不过用C写费力不讨好,
: 用C++方便很多。

G****A
发帖数: 4160
15
C不知道, c++里好像template是专门来做这儿事的。
template
void function(Any &a, int N)
{
...
...
}

【在 d****i 的大作中提到】
: C里定义一个函数,用generic pointer void*作为调入参数,如下
: void function(void *a, int N)
: 其中a是一个array,N是array的长度,怎么可以在function中对array a[]进行操作呢
: ,如果预先不知道calling function中传进来的是int array还是double array还是其
: 他array? 是否需要另外传进来一个关于array类型的参数?

a****l
发帖数: 8211
16
this is totally different from LZ's case. Day and night difference.

【在 G****A 的大作中提到】
: C不知道, c++里好像template是专门来做这儿事的。
: template
: void function(Any &a, int N)
: {
: ...
: ...
: }

G****A
发帖数: 4160
17
en,看错了

【在 a****l 的大作中提到】
: this is totally different from LZ's case. Day and night difference.
1 (共1页)
进入Programming版参与讨论
相关主题
其实微软是个做语言的公司C++指针问题 int (*) [10]
Go什么时候可能支持Generic?大家来做题C++。
关于void指针C++ Q87: What is wrong with this swap function? (转载)
JHQ的一道指针题。Question about type conversion (转载)
How to return an array in a C++ function?一道很奇怪的面试题
请问c++中操作符可以声明为虚函数吗?C 里面有办法永久改变一个指针的属性吗?
c++的问题就是用*标识指针,和乘法混了,应该用@替代问个指针array 的简单问题
override operator[] inline[新手]一直都把C++当Java写,有啥严重不妥?
相关话题的讨论汇总
话题: array话题: void话题: mytype话题: int话题: c++