user-0 提问: typedef数组

回复:
user: user-1
content: 请那些喜欢将数组作为函数参数传来传去或作为函数返回值的码农思考一下为什么不把整个互联网内容当作函数参数传来传去或作为函数返回值呢？

user: user-0
content: 引用 5 楼 fefe82 的回复:[quote=引用 楼主 yuxi1989 的回复:] 我需要用typedef一个数组，然后作为函数形参，那函数传进去的仍然是数组指针吧？不会做深拷贝吧？那如果想达到类似效果，是不是只能typedef struct了，struct里面一堆int。谢谢！  typedef int a[100]; int func(a)   数组不能成为函数的参数，任何方式都不行。  但是数组的指针可以。  数组的指针与指向数组首元素的指针是两回事。数组可能自动转换为指向其首元素的指针（临时变量）。如果要得到数组的指针需要用 & 。  你可以用 struct ，但是如果元素比较多的话不推荐。效率问题。[/quote] 主要是想类似c++里面class，class我只要定义好构造、析构、复制、operator=，深拷贝基本上就没有这种问题了。C还没有任何思路该怎么做。

user: user-2
content: 引用 楼主 yuxi1989 的回复:我需要用typedef一个数组，然后作为函数形参，那函数传进去的仍然是数组指针吧？不会做深拷贝吧？那如果想达到类似效果，是不是只能typedef struct了，struct里面一堆int。谢谢！  typedef int a[100]; int func(a)   数组不能成为函数的参数，任何方式都不行。  但是数组的指针可以。  数组的指针与指向数组首元素的指针是两回事。数组可能自动转换为指向其首元素的指针（临时变量）。如果要得到数组的指针需要用 & 。  你可以用 struct ，但是如果元素比较多的话不推荐。效率问题。

user: user-3
content: 首先你这个想法有点多此一举，因为你可以直接把数组当作参数传递进去，但是如果传递数组，要哦注意算好数组的长度连同数据一起传进去， 比如:  void  MyFunction(int  nA[16])//函数定义  int  nArry[16] = {0};   //数组定义  MyFunction(nArry[16])//调用   至于你这个问题也是一样的，你要是要用typedef，那么你的函数参数变量类型也要是你typedef出来的类型，实际上传的就是一种东西啊；但是你这样有一个问题，传进去以后数组长度可能不对

user: user-4
content: 引用 2 楼 yuxi1989 的回复:[quote=引用 1 楼 jianwen0529 的回复:] 类似效果是什么效果？  typedef struct传的是值吧 就是函数func传进去的不是数组转成的指针，而是数组的内容。[/quote] 确实不能 数组你需要一个副本，就定义一个临时数组，然后循环拷贝每一个值即可 如果你数组元素不多，这个性能的开销是很微小的

user: user-0
content: 引用 1 楼 jianwen0529 的回复:类似效果是什么效果？  typedef struct传的是值吧 就是函数func传进去的不是数组转成的指针，而是数组的内容。

user: user-4
content: 类似效果是什么效果？  typedef struct传的是值吧

user: user-5
content: 1、数组作为参数会退化为指针  2、可以传递指向数组的指针  3、下面语句中，c的类型实际为int*  typedef int a[100]; int func(a c) { }  4、下面传入的是指向数组的指针：  int func(int (*c)[100])

user: user-6
content: 我感觉这个typedef定义数组太硬，即数组的长度已经固定了。参数传递数组，其实编译器就是认为是指针。 数组长度不确定，可以考虑在堆上动态申请； 数组参数是指针，那么就没必要typedef数组了。

user: user-3
content: 引用 8 楼 fefe82 的回复:[quote=引用 7 楼 Janxionwang 的回复:] [quote=引用 5 楼 fefe82 的回复:] [quote=引用 楼主 yuxi1989 的回复:] 我需要用typedef一个数组，然后作为函数形参，那函数传进去的仍然是数组指针吧？不会做深拷贝吧？那如果想达到类似效果，是不是只能typedef struct了，struct里面一堆int。谢谢！  typedef int a[100]; int func(a)   数组不能成为函数的参数，任何方式都不行。  但是数组的指针可以。  数组的指针与指向数组首元素的指针是两回事。数组可能自动转换为指向其首元素的指针（临时变量）。如果要得到数组的指针需要用 & 。  你可以用 struct ，但是如果元素比较多的话不推荐。效率问题。[/quote]  谁说的数组不能做参数的？[/quote]  函数参数里，任何数组形式的东西，实际都是指针（指向元素类型的指针）。  #4 楼的例子里，函数的参数也是一个指针（int *）。[/quote]  虽然这两个等价： void function( int* );  void function( int[SIZE] );   但是那也是说编译器把数组参数识别为指针，这不能说成是函数参数不支持数组吧，你把一个数组当作参数来写来传递，这是可以的啊，所以你只能说他们等价，不能说不支持数组，你觉得呢？

user: user-2
content: 引用 7 楼 Janxionwang 的回复:[quote=引用 5 楼 fefe82 的回复:] [quote=引用 楼主 yuxi1989 的回复:] 我需要用typedef一个数组，然后作为函数形参，那函数传进去的仍然是数组指针吧？不会做深拷贝吧？那如果想达到类似效果，是不是只能typedef struct了，struct里面一堆int。谢谢！  typedef int a[100]; int func(a)   数组不能成为函数的参数，任何方式都不行。  但是数组的指针可以。  数组的指针与指向数组首元素的指针是两回事。数组可能自动转换为指向其首元素的指针（临时变量）。如果要得到数组的指针需要用 & 。  你可以用 struct ，但是如果元素比较多的话不推荐。效率问题。[/quote]  谁说的数组不能做参数的？[/quote]  函数参数里，任何数组形式的东西，实际都是指针（指向元素类型的指针）。  #4 楼的例子里，函数的参数也是一个指针（int *）。

user: user-3
content: 引用 5 楼 fefe82 的回复:[quote=引用 楼主 yuxi1989 的回复:] 我需要用typedef一个数组，然后作为函数形参，那函数传进去的仍然是数组指针吧？不会做深拷贝吧？那如果想达到类似效果，是不是只能typedef struct了，struct里面一堆int。谢谢！  typedef int a[100]; int func(a)   数组不能成为函数的参数，任何方式都不行。  但是数组的指针可以。  数组的指针与指向数组首元素的指针是两回事。数组可能自动转换为指向其首元素的指针（临时变量）。如果要得到数组的指针需要用 & 。  你可以用 struct ，但是如果元素比较多的话不推荐。效率问题。[/quote]  谁说的数组不能做参数的？