C语言的简单使用(一、数据类型的本质)

这篇博客要说的其实就一句话:
类型的本质是固定内存块大小的别名
拿最常见的 int 型变量举例
int 为4个字节

int a;		//告诉编译器,分配4个字节,用a代表那块区域
int b[10];	//告诉编译器, 分配4*10个字节,用b代表那块区域

对于变量 a 应该没谁会有问题,你用sizeof(a)求一下,a的大小就是4。
但是数组 b 要说的就多了,谁让C语言有指针这个神奇的东西呢,在C语言里
数组名 = 数组首元素地址 = 数组首地址
但是它们仅仅是值相等,这3个东西的概念不能相互替换!
分别打印出 b 、b[0]的地址 和 b 的地址

printf("b = %d  &b[0] = %d  &b = %d\n",b,&b[0],&b);

结果是
在这里插入图片描述
证明上面是那个等式是对的。
那么这又怎么样呢?它能说明什么问题呢?如果仅仅是这样它有什么被记住的价值呢?
这是为了说明文章最开头提到的那句话
类型的本质是固定内存块大小的别名
b, &b数据类型不一样
b,数组首元素地址,一个元素4字节,+1 -> +4
&b,整个数组的首地址, 一个数组4*10 = 40字节,+1 -> +40
用程序来说话就是

printf("b+1 = %d  &b+1 = %d\n", b+1, &b+1);

在这里插入图片描述最后说一下指针变量
C语言的指针变量本质上就是个变量,代表了一块存储区域,只是它跟一般变量的唯一区别就是它存的是地址,你若硬要拿指针存数据没有任何问题。
在32位的系统中一个指针有4个字节,64位的有8个字节

	char **p = NULL;
	int *q = NULL;
	printf("sizeof(p) = %d, sizeof(q) = %d\n",sizeof(p),sizeof(q));

在这里插入图片描述
所以当你声明一个指针,如 int *p = NULL 的时候就是在告诉编译器:
给我在内存里找到4个字节的空间,把它命名为p,里头放上数字0x00000000,它以后就用来存放其它int型变量的地址了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值