如何判断变量是数组还是对象

发布网友

我来回答

1个回答

热心网友

ls错误。数组是数组,本身不是指针;数组退化为对应指针仅在传递函数参数等少数情形下成立——而且这些情况下,数组本身不变,只是另外构造了一个和指向数组首元素的指针(这样数组和指针的值相等)而已。
指针无论是在编译期还是在运行期都不包含指向的对象的类型信息。对于sizeof,是在编译期计算的,只有对于数组名称或&数组名称直接作用才能体现数组左值语义而返回整个数组的大小,对于指向数组首地址的指针而言,和其它指针一样仍然只返回指针本身的大小。
例如
char
a[10]
=
{'a'};
char*
p
=
a;
char*
q
=
&a[2];
sizeof(a);
/*
结果为10*/
sizeof(&a);
/*
结果为10*/
sizeof(p);
/*
结果在32位平台上为4*/
sizeof(q);
/*结果等于sizeof(p)*/
所以,结论是无法通过指针本身判断指向对象的类型以及所占空间的大小。所以,老老实实另外保存一个标志变量或者长度(0为非数组)来判断比较稳妥(如果是结构体变量,也可以用一个成员作为标志变量,不过比较浪费就是了)。
====
[原创回答团]

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com