zoukankan      html  css  js  c++  java
  • 两个有关数组的变量名和其地址的问题?

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

    	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);

  • 相关阅读:
    Retrofit源码分析
    Android异步消息机制
    崩溃bug日志总结3
    单例模式
    总结(第一段)
    mysql日期类型比较
    mysql记录(一)
    JSONObject/JSONArray的区别
    java 正则表达式(Pattern ,Matcher)的使用
    javaweb开发中的权限管理的方法
  • 原文地址:https://www.cnblogs.com/yayagamer/p/2084571.html
Copyright © 2011-2022 走看看