两个有关数组的变量名和其地址的问题?
2011-06-19 11:03
381 查看
这个问题,源于我看到一段代码,于是研究了一下
可是我发现这样一个问题,如果你用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])是一个指针么?
如果此时,你调用这个函数,输出会是什么?is or is *NOT*?
int a[5] = {7};
UnusedVar(a);
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);
相关文章推荐
- 有关TI DSP的EMIF接口的两个问题:地址总线不从零开始问题及寻址范围问题
- ORACLE中有关两个日期型变量相减得到天数的问题
- C++有关char变量地址输出的问题
- 关于数组两个元素地址相减的问题
- 有关TI C6000的DSP的EMIF接口的两个问题:地址总线不从零开始问题及寻址范围问题
- 堆栈溢出问题 调试到位置(test dword ptr [eax],eax ; probe page.)局部数组变量定义所分配的最大空间为1M
- 交换两个变量效率问题
- 浅谈C语言中变量、常量、数组、字符串、指针的地址
- 用传地址方法交换两个变量的值
- 字符串问题---数组中两个字符串的最小距离
- C/C++中关于地址、指针和引用变量的学习笔记(二) : 数组
- 数组名、数组名取地址以及作为函数传递带来的问题
- 两个数组合并,解决超出数组界限问题
- 为什么数组可以不加“&”取它的地址,而普通变量必须要加“& ”才可以呢?
- C语言数组首地址问题
- 有关两个select内容互相移动问题
- linux进程系列(3)父子进程变量虚拟内存地址相同但变量值不同的问题
- 堆栈溢出问题 调试到位置(test dword ptr [eax],eax ; probe page.)局部数组变量定义所分配的最大空间为1M
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- OC动态创建的问题变量数组.有数组,在阵列13要素,第一个数据包阵列,每3元素为一组,分成若干组,这些数据包的统一管理。最后,一个数组.(要动态地创建一个数组).两种方法