C语言之数据类型

1、数据类型是固定内存块大小的别名,也就是说申明变量为一种数据类型就是告诉编译器分配多少内存给我。

看这么一段代码:

#include"stdio.h"
#include"stdlib.h"

int main() {
    int a[10];    //告诉编译器分配40个字节
    printf("a : %d, a + 1 : %d, &a : %d, &a + 1 : %d\n", a, a + 1, &a, &a + 1);
    system("pause");
    return 0;
}

输出结果:

这里写图片描述

可以看到a与&a是一样的,都是a的首地址,a + 1与 &a + 1不一样,a + 1相比a进了4字节,&a + 1相比&a进了40个字节。

也就是说a和&a的数据类型是不一样的,a代表数组a的首地址,&a代表整个数组的地址。

2、数据类型别名

通过typedef是可以对数据起别名的:

#include"stdio.h"
#include"stdlib.h"

struct Teacher {
    char name[128];
    int age;
};

int main() {
    struct Teacher t;
    system("pause");
    return 0;
}

在C语言中,对于结构体,如果写成上面的形式,是不能直接使用Teacher作为数据类型的,必须使用struct Teacher(这在C++中优化了,可以直接使用Teacher作为数据类型)。

把上面的代码改一下:

#include"stdio.h"
#include"stdlib.h"

typedef struct Teacher {
    char name[128];
    int age;
}Teacher;

int main() {
    Teacher t;
    system("pause");
    return 0;
}

这就用typedef就是给struct Teacher起了一个别名叫Teacher,所以这里就可以使用Teacher作为数据类型了。

3、void数据类型

void类型表示任何数据类型,void*可以指向任何类型的地址;

注意:

1> 不存在void的变量,因为void类型表示任何的数据类型,那编译器就不知道该如何分配内存了。

2> void类型主要用来封装数据类型,让调用接口的用户不知道参数的数据类型是什么。

例如malloc的返回类型就是void*:

char *p = (char*)malloc(100);

memcpy函数的参数也是void* 类型的

memcpyvoid* buf, void const * input, int buflen);

4、思考

(1)如何表达数组的数据类型?
(2)函数可以看成是数据类型吗?
(3)如何对函数重定义?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值