C语言,如何检测变量的数据类型

C语言,如何检测变量的数据类型,第1张

呵呵 我说了可不可以回答得通俗点,可以举个例子嘛我之前就查过type了,没看懂。回答:c语言没有检查变量类型的函数,在C语言中定义的变量,只是根据变量类型来分配默认的存储空间大小,而不记录空间中存储的具体的值的类型。比如你定义的字符类型可以当整形来用,可以直接在上面加减一个数值。

效力是做好工作的魂灵 在上秦小麟教员的数据库实现技巧的时辰,教员提到了一个题目:如安在运行时获取一个变量的类型,这用C实现如同要大费周折。今天正好碰着一个题目想看看C&#43;&#43;STL中的sort算法的实现,发明里面有个技能可以很轻易做到这一点。我就立即本身做了一个实验。如下可以获取运行时变量的类型。人生一世不就是为了化短暂的事物为永远的吗?要做到这一步,就须懂得如何器重这短暂和永远。 此中间思惟就是,应用模板函数的重载,是什么类型的参数就去调用参数是那个类型的函数。如许就让编译器去本身辨认,而编译器当然知道每个变量的类型。这让我想去商量那些我经常用到的STL算法的实现,若是你也经常应用,何不借此机会好好研究一下呢?我感触感染至少有几个益处。1 加强对C&#43;&#43;说话的懂得2 加强法度的设计才能3 加强算法解析与设计的才能#include<iostream>using namespace std;void PrintType(int t){cout<<"int type";}void PrintType(char t){cout<<"char type";}void PrintType(long t){cout<<"long type";}template<typename T> inlinevoid ValueType(T t){PrintType(t);}int main(){int a;char c;ValueType(a);cout<<endl;ValueType(c);cout<<endl;return 0;} 上例的功能很轻易扩大,若是你向本身的项目添加了一个新的类型,那么只要重载一个PrintValue( )即可。这仅仅是输出变量的类型,若是你还想再获取变量的类型的时辰做更多的工作的话,显然也是很轻易做到的。比如你想先获取变量的类型,如许之后才干断定分派给变量几许空间,那么这个也可以轻松实现,只须要改变PrintValue的功能即可。这里可以写一个int PrintValue(YourType t) ,她甚至应当有一个更好的名字比如int Memory(Type t)。 在不改变函数名的同时对上述函数稍加批改就可以实现输出传入参数应当分派的内存大小。

nextElement()如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。

利用这两个函数,利用while循环就可以读取里面的元素,当然读取出来得元素通过强制转换,就可以和变量进行比较

希望对你有所帮助

对于一个变量,你可以使用siezof()来测试它的大小。

比如在win32平台上,你想知道一个变量a的类型。

你可以int b = sizeof(a);

如果b的值是1,那么就是char型的。

如果b的值是4,那么就是int型的。

希望可以帮到你~

用typeof(var) 来返回一个数据类型\x0d\返回的可能值有\x0d\'undefined- 如果变量是 Undefined 类型的\x0d\'boolean- 如果变量是 Boolean 类型的\x0d\'number- 如果变量是 Number 类型的\x0d\'string- 如果变量是 String 类型的\x0d\'object- 如果变量是一种引用类型或 Null 类型的\x0d\\x0d\if(typeof(123)=='number')alert('this is a number')\x0d\以此类推

如何判断js中的数据类型:typeof、instanceof、 constructor、 prototype方法比较

如何判断js中的类型呢,先举几个例子:

var a = "iamstring";

var b = 222;

var c= [1,2,3];

var d = new Date();

var e =

function(){alert(111);};

var f =

function(){thisname="22";};

最常见的判断方法:typeof

alert(typeof a)

------------> string

alert(typeof b)

------------> number

alert(typeof c)

------------> object

alert(typeof d)

------------> object

alert(typeof e)

------------> function

alert(typeof f)

------------> function

其中typeof返回的类型都是字符串形式,需注意,例如:

alert(typeof a == "string")

-------------> true

alert(typeof a == String)

---------------> false

另外typeof

可以判断function的类型;在判断除Object类型的对象时比较方便。

判断已知对象类型的方法: instanceof

alert(c instanceof Array)

---------------> true

alert(d instanceof

Date)

alert(f instanceof Function)

------------> true

alert(f instanceof function)

------------> false

注意:instanceof

后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。

根据对象的constructor判断:

constructor

alert(cconstructor ===

Array) ----------> true

alert(dconstructor === Date)

-----------> true

alert(econstructor ===

Function) -------> true

注意: constructor 在类继承时会出错

eg,

function A(){};

function B(){};

Aprototype = new B(); //A继承自B

var aObj = new A();

alert(aobjconstructor === B) ----------->

true;

alert(aobjconstructor === A) ----------->

false;

而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true:

alert(aobj instanceof B) ---------------->

true;

alert(aobj instanceof B) ---------------->

true;

言归正传,解决construtor的问题通常是让对象的constructor手动指向自己:

aobjconstructor = A;

//将自己的类赋值给对象的constructor属性

alert(aobjconstructor === A) ----------->

true;

alert(aobjconstructor === B) ----------->

false; //基类不会报true了;

通用但很繁琐的方法: prototype

alert(ObjectprototypetoStringcall(a) === ‘[object String]’)

-------> true;

alert(ObjectprototypetoStringcall(b) === ‘[object Number]’)

-------> true;

alert(ObjectprototypetoStringcall(c) === ‘[object Array]’)

-------> true;

alert(ObjectprototypetoStringcall(d) === ‘[object Date]’)

-------> true;

alert(ObjectprototypetoStringcall(e) === ‘[object Function]’)

-------> true;

alert(ObjectprototypetoStringcall(f) === ‘[object Function]’)

-------> true;

大小写不能写错,比较麻烦,但胜在通用。

通常情况下用typeof

- typeof

  + 可以识别标准类型(Null除外)

  + 不能识别对象类型(Function除外)

- instanceof

  + 能判别内置对象类型

  + 不能判别原始类型

  + 能判别自定义类型

  + 结合1和3,能识别所有对象类型

- ObjectprototypetoStringcall

  + 可以识别标准类型以及内置(build-in)对象类型

  + 无法识别自定义对象类型

- constructor(生成函数的构造函数本身)

  + 能判别标准类型(Undefined/Null除外)

  + 能判别内置对象类型

  + 能判别自定义对象类型

//类型判别

function type(obj) {

    return ObjectprototypetoStringcall(obj)slice(8, -1);

}

//构造器类型判别

function getConstructorName(obj) {

    return obj && objconstructor && 

        objconstructortoString()match(/function\s([^(]))[1];

}

以上就是关于C语言,如何检测变量的数据类型全部的内容,包括:C语言,如何检测变量的数据类型、如何用C++获取运行时变量的类型、在java中如何判断一个变量的类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9265710.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存