64位变量大小
int main()
{
printf("*************下面打印数据类型大小*************\n");
printf("指针 大小为 %d\n", sizeof(char*));
printf("字符型 大小为 %d\n", sizeof(char));
printf("整形 大小为 %d\n", sizeof(int));
printf("短整型 大小为 %d\n", sizeof(short));
printf("长整型 大小为 %d\n", sizeof(long));
printf("无符号短整型 大小为 %d\n", sizeof(unsigned short));
printf("无符号长整型 大小为 %d\n", sizeof(unsigned long));
printf("双浮点型 大小为 %d\n", sizeof(double));
printf("*******************************************\n");
}
输出为:
*************下面打印数据类型大小*************
指针 大小为 8
字符型 大小为 1
整形 大小为 4
短整型 大小为 2
长整型 大小为 4
无符号短整型 大小为 2
无符号长整型 大小为 4
双浮点型 大小为 8
**************************************************
指针表示地址
int main()
{
char a[] = "1";
char* p = a;
printf("%p\n", p);
printf("*******************************************\n");
}
输出为:
00000097D10FF8A4 //64位系统,八个字节,每两个数字一个字节
**************************************************
因为指针就是地址,所以无论是什么类型的指针,其大小都是8(只和操作系统位数有关,若是32位系统,则地址占4个字节)
下面可以验证一下:
struct AGE
{
int year;
int month;
int day;
};
int main()
{
printf(" int型 指针大小为 %d\n", sizeof(int*));
printf(" short型 指针大小为 %d\n", sizeof(short*));
printf(" char型 指针大小为 %d\n", sizeof(char*));
printf(" long型 指针大小为 %d\n", sizeof(long*));
printf("struct型 指针大小为 %d\n", sizeof(AGE*));
printf("double型 双浮点型大小为 %d\n", sizeof(double));
printf("**************************************************\n");
}
输出为:
int型 指针大小为 8
short型 指针大小为 8
char型 指针大小为 8
long型 指针大小为 8
struct型 指针大小为 8
double型 双浮点型大小为 8
**************************************************
定义宏
#define add1(x,y) x*y
#define add2(x,y) (x*y)
#define add3(x,y) ((x)*(y))
int main()
{
printf("1-2 * 3 * 4 = %d\n", fun1(1-2, 3)*4);
printf("(1-2 * 3) * 4 = %d\n", fun2(1-2, 3)*4);
printf("((1-2) * (3)) * 4 = %d\n", fun3(1-2, 3)*4);
printf("*******************************************\n");
}
输出为:
1-2 * 3 * 4 = -23
(1-2 * 3) * 4 = -20
((1-2) * (3)) * 4 = -12
**************************************************
由此可以看出:
(1)在定义宏的时候,参数X,Y都是表达式,需要用括号括起来。
(2)并且整个宏定义式也需要用括号括起来,fun3(x,y)-> ((x)*(y))才是我们想要的结果。