• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    6年前 (2013-04-11)  笔试面试 |   抢沙发  7 
    文章评分 0 次,平均分 0.0
    int main()
    {
    	char *c	,d;
    	//char* c, d;
    	cout<<sizeof(c)<<" "<<sizeof(d)<<endl;
    }

    char *c,d;你可能会认为c是一个指针,d是一个字符。
    char* c,d;你就可能认为c,d都是指针了。
    实际上char才是类型,“*”只来说明它是个指针。故"*"修饰的仅仅是c,而与d无关。

    再来看下面这组

    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    using namespace std;
    
    typedef char* myStringT;
    #define myStringD char*
    int main()
    {
    	myStringT a, b;
    	myStringD c, d;
    	cout<<sizeof(a)<<" "<<sizeof(b)<<endl;
    	cout<<sizeof(c)<<" "<<sizeof(d)<<endl;
    }

    结果是:
    4 4
    4 1

    typedef char* myStringT;
    #define myStringD char*
    这两个有什么区别吗?
    typedef char * myStringT 定义了一个新的类型别名,有类型检查,在编译的时候处理。
    而#define myStringD char * 只是做了个简单的替换,无类型检查,在预编译的时候处理。
    主要区别在于这种使用方式myStringT a,b; myStringD c,d; a,b ,c都是char*类型,而d为char类型
    由于typedef还要做类型检查,#define没有,所以typedef比#define安全。

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/540.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享