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

本文详细介绍了C语言中的声明概念,包括声明与定义的区别,重点讲解了函数声明、结构体声明和typedef的用法。通过实例解析了不同类型的函数声明,如普通函数指针、返回函数指针和函数数组。同时,提到了结构体声明的注意事项,并阐述了typedef的功能及其与#define的区别。文章适合C语言初学者,帮助理解这些基础知识。
摘要由CSDN通过智能技术生成

前言

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

在这里插入图片描述


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


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

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

  • 需注意,声明与定义可以说是俩回事。定义时,则编译器会为其分配内存,而声明只是单纯的声明某个变量或类型;
  • 声明不需要分配内存,但该声明的名字已在内存上;
  • 声明能够多次,而定义只能一次。

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<stdio.h>
#include<stdlib.h>

typedef void (*func)(int);

func test(int x){
	
	static int y = x;
	printf("test typedef: %d\n", 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为整型 

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jxiepc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值