typedef关键字
作用: 给数据类型起别名,格式: typedef 原来的数据类型名称 新的数据类型名称;
- 基本概念
#include <stdio.h>
int main()
{
/*
* typedef 给数据类型起别名
*
* 格式: typedef 原来的数据类型名称 新的数据类型名称;
* 注意点:
* typedef不是定义一个新的数据类型,而是定义一个新的名字
*/
typedef int ZHENGSHU;
typedef ZHENGSHU ZHE; //给别名还能再起名字
return 0;
}
- 普通指针起别名
// 1.给指针起别名
typedef char* String;
String name = "haha";
printf("%s\n", name);
- 给结构体起别名
注意点: 共用体,枚举和结构体起名方式一样
//2.给结构体起别名
struct Person
{
String name;
int age;
};
//2.1 先定义结构体类型,再给结构体起别名
typedef struct Person ps;
ps p = {"niuzi", 20}; //定义结构体变量
printf("%s\n", p.name);
//2.2 定义结构体类型同时,再给结构体起别名
typedef struct Person
{
String name;
int age;
} ps;
//2.2 定义结构体类型同时,再给结构体起别名,并且省略原有类型的名称
//企业开发经常这样子写
typedef struct
{
String name;
int age;
} Person;
Person p = {"haha", 20};
- 给函数起别名
注意点: 给指向函数指针起别名,那么指针名称就是别名,企业开发经常使用
//3. 给函数指针起别名
//注意点: 给指向函数指针起别名,那么指针名称就是别名,企业开发经常使用
typedef int (*funp)(int a, int b);
funp p1 = ∑ // 以后只要是以上这种函数样式都可以用funp来定义指针变量
funp p2 = −
return 0;
}
int sum(int a, int b){
return a + b;
}
int minus(int a, int b){
return a - b;
}
- typedef和宏定义取别名区别
如果是数据类型起别名,一律使用 typedef
宏定义处理复杂的就不好用
const关键字
作用: 用于定义一个常量,注意修饰指针的时候位置不同会造成不同的结果
#include <stdio.h>
int main()
{
/*
* const使用
* 格式: const 数据类型 变量名称;
* 字面量常量,宏定义常量
* 注意点: const可以写在数据类型的前面也可以写在数据类型的后面
* 对于基本数据类型来说写在前面和写在后面没有区别,但是
* 对于指针类型来说,前后是有区别的
*/
// int num = 0; //num是变量保存的数据可以被修改
// const int num = 0; //只要在变量前面加上const,那么这个变量保存的数据就不可以修改了
int num = 444;
// const int *p; //1. 写在数据类型前面,代表指向的内存中存储的数据不能被修改,但是指向地址可以被修改
// int const *p; //2. 写在数据类型的右边,和写在数据类型的左边作用一样
int *const p; //3. 写在指针*号的右边代表指针指向的内存空间可以被修改,但是指针的指向不可以修改
p = #
printf("%i\n", *p);
*p = 888;
printf("%i\n", *p);
int value = 666;
p = &value;
printf("%i\n", *p);
return 0;
}
网友评论