数组和指针问题,计算数组大小

elemusic 2012-12-12 06:46:28
直接上代码



#include <stdio.h>

unsigned char meta[] = {0x00, 0xFF};

void fun( unsigned char* meta )
{
int len = sizeof(meta)/sizeof(meta[0]);

printf("%d========\n", len);
}

int main()
{
int len = sizeof(meta)/sizeof(meta[0]);

printf("%d\n", len);
fun(meta);

return 0;
}


也就是说,我如果把一个数组当做参数传给一个函数处理,如果在函数中算出数组的大小?
...全文
771 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
关于C++ template,这个世界上只有两样东西能讲清楚,一样是C++标准,另一样是<C++ template>陈伟柱翻译的,其它的书根本没讲清楚过
yisikaipu 2012-12-12
  • 打赏
  • 举报
回复
引用 8 楼 elemusic 的回复:
我的意思是为什么模板函数写个N,N就自动被识别出来是数组个大小了呢?这是什么原理? 哪本书提到么?
比如 C++ Primer 第3版 $10.2 函数模板实例化 专门就讲了数组引用的例子
elemusic 2012-12-12
  • 打赏
  • 举报
回复
我的意思是为什么模板函数写个N,N就自动被识别出来是数组个大小了呢?这是什么原理? 哪本书提到么?
yisikaipu 2012-12-12
  • 打赏
  • 举报
回复
引用 6 楼 elemusic 的回复:
4楼的方法可以啊,能解释一下function(type (&array)[uLen])这里是什么意思么?
void han(unsigned char (&)[2])
{
	printf("2\n");
}

template<int n>
void fun(unsigned char (&)[n])
{
	printf("%d\n",n);
}

int main()
{
	unsigned char meta[]={0x00,0xff};
	unsigned char (&r)[2]=meta; // 数组的引用
	han(meta); // 普通函数
	fun(meta); // 模板函数
	return 0;
}
elemusic 2012-12-12
  • 打赏
  • 举报
回复
4楼的方法可以啊,能解释一下function(type (&array)[uLen])这里是什么意思么?
lee_鹿游原 2012-12-12
  • 打赏
  • 举报
回复

template <class T>
int getArrayLength(T& array) 
{ 
    xxxxxxxxx....
}
 
int main()
{
    int p[] = {2,3,4,5};
    std::cout<<getArrayValue(p)<<std::endl;
}
  • 打赏
  • 举报
回复
不,楼主,我告诉你可以用如下的代码知道长度,当然,如果你把数组用普通的方法传给函数,则会退化成指针的,此时得不到长度,想知道长度,只能用我的那个方法:

#include <iostream>
using namespace std;

template<typename	type,  int	uLen>
void	function(type (&array)[uLen]){
	cout<<"数组的长度是:"<<uLen<<endl;
}

int main(){
	int	iarray[100];
	function(iarray);
	double	lfarray[123];
	function(lfarray);
}
ouuyang 2012-12-12
  • 打赏
  • 举报
回复
可以直接将数组做为参数 void fun(struct test[] arg);
枫桦沐阳 2012-12-12
  • 打赏
  • 举报
回复
不用怀疑 楼上说的对
yisikaipu 2012-12-12
  • 打赏
  • 举报
回复
引用 楼主 elemusic 的回复:
也就是说,我如果把一个数组当做参数传给一个函数处理,如果在函数中算出数组的大小?
没有办法的,数组退化为指针后,长度信息就丢失了 所以函数需要设计为fun(unsigned char*,int); 或者用模板等其它办法

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧