如何判断一个变量是否为数组变量

frank529 2009-05-16 10:20:51
如何判断一个变量是一般变量还是数组变量,请给出具体代码
...全文
317 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
datacode 2009-05-16
  • 打赏
  • 举报
回复
不敢相信自己的眼睛,居然有搞计算机的问出这种问题 ...
—————————————————————————


lylm 2009-05-16
  • 打赏
  • 举报
回复
1.这个好像不行,不管是简单变量,还是数组,或是结构等,编译器只是为你分配内存,内存大也不见得是数组,内存小也不见的不是,所以用sizeof也不行,还存在数组退化成指针的情况

2.有没有赋值就更不清楚了,应用可以做

3.对于一些像PHP的脚步语言,可以知道变量类型及是否赋值
liao05050075 2009-05-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 frank529 的回复:]
另外,有没有办法判断数组是否被赋值
[/Quote]

这个应该没办法的吧。
毕竟数组新开出来的时候,它里面元素的值都是随机的,你不能根据它的值来判断它有没有被赋值。
所以你只能加个标志flag,一开始为0,然后在数组赋值语句后,把它改为1.
woods2001 2009-05-16
  • 打赏
  • 举报
回复
普通变量的内容是一个普通的数据
数组的内容是指向数据的指针
crst_zh 2009-05-16
  • 打赏
  • 举报
回复
看sizeof()吧,但是作为参数传递的话数组也会退化为指针
HelloDan 2009-05-16
  • 打赏
  • 举报
回复
可能用sizeof可以吧。不过具体看你的要求。
frank529 2009-05-16
  • 打赏
  • 举报
回复
另外,有没有办法判断数组是否被赋值
frank529 2009-05-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 Demon__Hunter 的回复:]
C/C++ code
#include<iostream>
using namespace std;
template<typename T>
bool IsArray(T Arr)
{
return false;
}
template<typename T,size_t size>
bool IsArray(T (&Arr)[size])
{
return true;
}

int main()
{
int a[10];
char b;
if(IsArray(a))
{
cout<<"type is array..."<<endl;
}
else
{
cout<<"type isn't array..."<<endl;

[/Quote]

GOOD,问题解决
机智的呆呆 2009-05-16
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
template<typename T>
bool IsArray(T Arr)
{
return false;
}
template<typename T,size_t size>
bool IsArray(T (&Arr)[size])
{
return true;
}

int main()
{
int a[10];
char b;
if(IsArray(a))
{
cout<<"type is array..."<<endl;
}
else
{
cout<<"type isn't array..."<<endl;
}
if(IsArray(b))
{
cout<<"type is array..."<<endl;
}
else
{
cout<<"type isn't array..."<<endl;
}

}


lz凑活着试试吧~~~
光宇广贞 2009-05-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 operatingtuzi 的回复:]
简单点说就是要编写函数找出数组中某个元素,这里要用到模板来获取数组长度,但如果传的参数不是数组则编译报错,所以要判断参数是不是数组。

楼主如果这样的话。。有一个想法 不知道能行不

C/C++ code
template <class T,int N>
int fun(T (&a)[N],T x)
{
int i=0;
while(i<N)
{
if (a[i++]==x)
return 1;
}
return 0;
}
[/Quote]

顶美女。不过那个N是没用的……函数对数组压栈,永远压指针。
operatingtuzi 2009-05-16
  • 打赏
  • 举报
回复
简单点说就是要编写函数找出数组中某个元素,这里要用到模板来获取数组长度,但如果传的参数不是数组则编译报错,所以要判断参数是不是数组。

楼主如果这样的话。。有一个想法 不知道能行不

template <class T,int N>
int fun(T (&a)[N],T x)
{
int i=0;
while(i<N)
{
if (a[i++]==x)
return 1;
}
return 0;
}

lpf000 2009-05-16
  • 打赏
  • 举报
回复
"没有愚蠢的问题,只有愚蠢的回答"
UP
lpf000 2009-05-16
  • 打赏
  • 举报
回复
这种编译出的错误,是编译器判断的,类型匹配嘛。
传递的实参类型,通过你声明的类型就告诉编译器吧
frank529 2009-05-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 datacode 的回复:]
不敢相信自己的眼睛,居然有搞计算机的问出这种问题 ...
—————————————————————————
[/Quote]
你什么意思,觉得这题目没水平是吗,你答出来了再发这种评论不迟。你以为这个问题容易啊,数组作参数会退化成指针,上面谁答出来了。
这是我在网上看到的一个题:
Below is an usual way we find one element in an array
const int *find1(const int* array, int n, int x)
{
const int* p = array;
for(int i = 0; i < n; i++)
{
if(*p == x)
{
return p;
}
++p;
}
return 0; }
In this case we have to bear the knowledge of value type "int", the size of array, even the existence of an array. Would you re-write it using template to eliminate all these dependencies?

简单点说就是要编写函数找出数组中某个元素,这里要用到模板来获取数组长度,但如果传的参数不是数组则编译报错,所以要判断参数是不是数组。

65,210

社区成员

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

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