两个有关数组的变量名和其地址的问题?

这个问题,源于我看到一段代码,于是研究了一下

	int b[5] = {1,2,3,4,5};
	int *a = (int *)(&b + 1);

可是我发现这样一个问题,如果你用VS2010 去debug,你会发现:

b, 0x0045fa54

&b, 0x0045fa54

b+1, 0x0045fa58

&b + 1, 0x0045fa68   //b 和 &b 相等,但b+1却不等于&b + 1,并且,&b + 1还是可以展开的,展开也是包含有5个元素,只是里面的值都非常巨大和怪异

b == &b, 1  // 如果你去判断b == &b,返回值是true

我不太清楚这是CRT就是这么解释的,还是哪里有问题?

第二个问题,一个数组名a (e.g. int a[10])是一个指针么?

template <typename T > 
struct is_a_ptr 
{ 
    enum{ yes = FALSE }; 
}; 
template <typename T > 
struct is_a_ptr <T* > 
{ 
    enum{ yes = TRUE }; 
}; 

template <typename T>
inline void UnusedVar(const T&)
{
    if(is_a_ptr<T>::yes)
		printf("Type T is a pointer!\r\n");
	else
		printf("Type T is *NOT* a pointer!\r\n");
}

如果此时,你调用这个函数,输出会是什么?is or is *NOT*?

int a[5] = {7};

 UnusedVar(a);

posted @ 2011-06-19 11:03  百分百好牛  阅读(425)  评论(1编辑  收藏  举报