(1)
#define 是宏命令,在编译前,由预处理器做替代,如同文本编辑的替代命令,把程序中的所有遇到的词,全部替代。
#define PINT int*
就是把所有的词 PINT 替换成 int * ,替换完毕再编译。
int* x; 和PINT x; 的声明是等价的。long int* x; 声明是可以的,long PINT x; 也是可以的
typedef int* PINT; 是语句,由编译器在编译过程中编译处理。
typedef int* PINT;
long int* x; 声明是可以的,但longPINT x; 不可以。
它们作用都是用PINT代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型 。宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。
例如:typedef (int*) PINT;以及下面这行:#define PINT2 int*
差别:PINT a,b;的效果同int *a; int *b;表示定义了两个整型指针变量。而PINT2 a,b;的效果同int *a, b;表示定义了一个整型指针变量a和整型变量b。
?(2)
派生类型(指针类型*,数组类型[ ],结构图类型struct,共用体类型union,函数类型)
隐式转换的,就是说两种数据类型必须兼容,隐式转换是向上转型(相当于是子类转父类)
(3)
char型数组,ch数组名
char ch[10]={"yhping"} :
表示在动态变量区中开辟一个能连续放6个字符的数组,数组名称是str.而赋值运算符右
边是一个字符串常量,这个字符串常量是存放在常量区的,这个表达式的意思是 将“yhping”这个字符串常量拷贝到刚才开辟的数组中
char ch2[10]={'y','h','p','i','n','g'};
这样初始化会把里面的字符依次分别赋给ch[0]~ch[9] 这10个元素,如果花括号里的字符个数大于数组长度则出现语法错误,如果小于,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符('\0')
char *str = "yhping";
表示在动态变量区中开辟一个存放指针的存储单元,指针变量名是str,"hello"同样也是一个字符串常量,存储在常量区,在程序的运行过程中一直存在。把字符串“hello”的地址值拷贝到刚才的存储单元中,即指针变量str的初值是字符串“hello”的地址。
strlen(ch);返回字符串的大小
strlen(str);返回字符串的大小
sizeof(ch);计算数组大小
sizeof(str);计算指针字节
sizeof("yhping"); 计算数组长度
(4)
char ch[100];
申请一个最多存放100个字符的数组。如果以字符串的形式存放(以空字符'\0'作为串尾标志),则串的长度最大为99。
char *str;
gets(ch);
gets(str);
其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数是字符数组的起始地址。
#define 是宏命令,在编译前,由预处理器做替代,如同文本编辑的替代命令,把程序中的所有遇到的词,全部替代。
#define PINT int*
就是把所有的词 PINT 替换成 int * ,替换完毕再编译。
int* x; 和PINT x; 的声明是等价的。long int* x; 声明是可以的,long PINT x; 也是可以的
typedef int* PINT; 是语句,由编译器在编译过程中编译处理。
typedef int* PINT;
long int* x; 声明是可以的,但longPINT x; 不可以。
它们作用都是用PINT代表 int * ,但是二者不同,正如前面所说 ,#define在预处理 时进行简单的替换,而typedef不是简单替换 ,而是采用如同定义变量的方法那样来声明一种类型 。宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变量的功能。
例如:typedef (int*) PINT;以及下面这行:#define PINT2 int*
差别:PINT a,b;的效果同int *a; int *b;表示定义了两个整型指针变量。而PINT2 a,b;的效果同int *a, b;表示定义了一个整型指针变量a和整型变量b。
?(2)
派生类型(指针类型*,数组类型[ ],结构图类型struct,共用体类型union,函数类型)
隐式转换的,就是说两种数据类型必须兼容,隐式转换是向上转型(相当于是子类转父类)
(3)
char型数组,ch数组名
char ch[10]={"yhping"} :
表示在动态变量区中开辟一个能连续放6个字符的数组,数组名称是str.而赋值运算符右
边是一个字符串常量,这个字符串常量是存放在常量区的,这个表达式的意思是 将“yhping”这个字符串常量拷贝到刚才开辟的数组中
char ch2[10]={'y','h','p','i','n','g'};
这样初始化会把里面的字符依次分别赋给ch[0]~ch[9] 这10个元素,如果花括号里的字符个数大于数组长度则出现语法错误,如果小于,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符('\0')
char *str = "yhping";
表示在动态变量区中开辟一个存放指针的存储单元,指针变量名是str,"hello"同样也是一个字符串常量,存储在常量区,在程序的运行过程中一直存在。把字符串“hello”的地址值拷贝到刚才的存储单元中,即指针变量str的初值是字符串“hello”的地址。
strlen(ch);返回字符串的大小
strlen(str);返回字符串的大小
sizeof(ch);计算数组大小
sizeof(str);计算指针字节
sizeof("yhping"); 计算数组长度
(4)
char ch[100];
申请一个最多存放100个字符的数组。如果以字符串的形式存放(以空字符'\0'作为串尾标志),则串的长度最大为99。
char *str;
gets(ch);
gets(str);
其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数是字符数组的起始地址。