栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 | 【耗费一夜总结三本C语言系列】之 声明

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 | 【耗费一夜总结三本C语言系列】之 声明

前言

本章内容总结了声明,概述了结构体、函数声明、以及typedef等知识点。


C语言 | 快速了解C的发展史李
C语言 | 【耗费一夜总结三本C语言系列】之 指针、数组 一文透彻~~~李
C语言 | 【耗费一夜总结三本C语言系列】之 结构体、联合、枚举李
C语言 | 【耗费一夜总结三本C语言系列】之 声明李
C语言 | 【耗费一夜总结三本C语言系列】之 作用域 在也不用担心分不清变量的作用域拉!!!李
C语言 | 【耗费一夜总结三本C语言系列】之 编译步骤 会用C还不知道C如何编译???李
C语言 | 【耗费一夜总结三本C语言系列】之 数据类型总结李
C语言 | 【耗费一夜总结三本C语言系列】之 位及进制的用法李


文章目录
    • 前言
    • 一、声明的含义是什么?与定义有什么区别?
      • 1.1 声明常使用的关键字
    • 二、几种声明
      • 2.1 函数声明
        • 2.1.1 几种常见的函数声明
      • 2.2 结构体声明
      • 2.3 typedef
        • 2.3.1 typdef与#define的区别

一、声明的含义是什么?与定义有什么区别?

声明是为了提前告知编译器该变量或者该函数类型已被预定,故需要遵循编译器的语法;

  • 需注意,声明与定义可以说是俩回事。定义时,则编译器会为其分配内存,而声明只是单纯的声明某个变量或类型;
  • 声明不需要分配内存,但该声明的名字已在内存上;
  • 声明能够多次,而定义只能一次。
1.1 声明常使用的关键字
  • const;
  • volatile;
  • typedef。
二、几种声明
  • 函数声明;
  • 结构体声明;
  • 联合声明;
  • 枚举声明;
  • 指针与数组声明;
2.1 函数声明

函数声明常与typedef结合,一般用于较复杂的函数指针及参数、返回值;

2.1.1 几种常见的函数声明

函数返回值类型 (* 指针变量名) (函数参数列表);

以下几种根据以上的公式进行扩展使用。

普通函数指针

// 普通的指针声明,参数为int类型
int (*func)(int);

返回函数指针

// 返回一个函数指针,参数为int类型
int (*func1(int i))();

# 进行拆分
(*func1(int i))、int()();
# ---
# (*func1):为指针变量名
# (int i):为参数列表
# int ()():返回一个函数指针

返回一个指向数组的指针

// 返回一个函数数组,参数为int类型
int (*func2(int x))[];

# 进行拆分
(*func2(int x))、int ()[]
# ---
# (*func2):为指针变量名
# (int x):为参数列表
# int ()[]:返回一个函数数组

函数数组

// 定义一个函数数组,存储的函数返回值为int类型,参数也int类型
int ((*func3[])(int x));

# 进行拆分
(*func3[])、int()、(int x)
# ---
# (*func3[]):为函数指针数组
# (int x):为参数列表
# int():返回值为int类型


// 定义一个函数数组
typedef int(*f)(int x, int y);

int test(int x, int y){
	printf("");
}

f num[100] = {
	test
};
2.2 结构体声明
struct 结构标签(可选){
	int i,
}变量定义;
  • 变量的申明与类型的声明应分开;
  • 尽量少用typdef在结构体上,声明带上strutc在阅读上回更加直观;
  • 若数组在结构体中进行传参,则不会传入数组首地址,是传值操作;
2.3 typedef

使用typdef将会给该类型创建一个新标签,但不会为其分配空间。

  • 类似于宏文本替换,但与宏的区别所在与它并不会引入新类型。
  • 不能使用,进行多个声明;
  • typedef不能嵌套在中间部分;

typedef的使用

#include
#include

typedef void (*func)(int);

func test(int x){
	
	static int y = x;
	printf("test typedef: %dn", x);

	return NULL;
}


void main()
{
	int x = 1;
	test(x);

	system("pause");
}
2.3.1 typdef与#define的区别
  • 两者类似,但typedef不会引入新类型;
  • typedef声明厚不能拓展,而define却可以再次更改其属性;
  • typedef声明可保证均为同一属性;
typedef int * dataType;

dataType x, y;	// x和y都为int类型

#define dataType int *;
dataType x, y;	// 由于#define为宏替换,则表达式变为int *x, y;故x为整型指针,y为整型 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/347354.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号