一个小小的写法,一个大大的阴谋

2013年4月11日 由 Creater 留言 »
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安全。

广告位

发表评论

你必须 登陆 方可发表评论.