《每天一分钟学习C语言·十一》static静态,内联函数,宏函数,排序

发布时间:2024年01月08日

1、
static静态修饰符
static全局变量和普通全局变量区别
static全局变量只能在本文件中使用,普通全局变量可以在一个项目下的所有文件中使用,需要加extern。static全局变量只能初始化一次

static局部变量和普通局部变量区别:
static局部变量只能初始化一次
如:

while(i-- <3)
{
	static int j = 0
	j++; //第一次循环j==1,第二次j==2,第三次j==3
}

static函数和普通函数区别:
static函数只能在本文件使用
普通函数可以在其他文件调用,但需要在文件中加入包含这个函数申明的头文件。或者直接在文件全局处申明这个其他文件的函数,然后就可以在这个文件中调用这个函数了

2、
内联函数
内联函数的定义与调用该函数的代码必须在同一文件中,如果有多个文件需要使用某个内联函数,一般将内联函数定义在头文件中。头文件一般只放函数声明,但内联函数是例外,需要在头文件定义

# include<stdio.h>
inline static void eatline()
{
	printf(“haha”);
}
int main(void)
{
	eatline(); //调用内联函数
}

函数式宏一般没有return返回值,内联函数可以有return返回值

3、
快速排序函数qsort()

void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *))

第一元素是数组首元素地址
第二个元素是数组长度
第三个元素是每个元素字节大小
第四个元素传入一个比较函数的函数地址
如对一个double的数组从小到大排序

int compar(const void *p1, const void *p2)
{
	const double * a1 = (const double *)p1; //必须强转
	const double *a2 = (const double *)p2;
	if(*a1 < *a2)
		return -1;
	else if (*a1 == *a2)
		return 0;
	else
		return 1;
}

4、
线性结构:数组(连续存储)、链表(离散存储)
线性结构常见应用:栈和队列
非线性结构:树和图

查找:折半查找
排序:冒泡、插入、选择、快排、归并

5、
宏函数

#include <stdio.h>
#define SUM(n) do { \
	int sum = 0; \
	while (n > 0) { \
		sum = sum + n; \
		n--; \
	} \
	printf("前n项和为:%d\n", sum); \
} while (0)

int main(void)
{
	int n = 5;
	SUM(n);  //15
	return 0;
}

宏函数的执行步骤是先把变量或者常量替换了,然后放到主函数里,这里n是变量,第一步替换:

do { 
	int sum = 0; 
	while (n > 0) { 
		sum = sum + n; 
		n--; 
	} 
	printf("前n项和为:%d\n", sum); 
} while (0)

第二步放到主函数:

int main(void)
{
	int n = 5;
	do { 
			int sum = 0; 
			while (n > 0) { 
				sum = sum + n; 
				n--;  //n是个变量可以自减操作,刚开始为5
			} 
			printf("前n项和为:%d\n", sum); 
	} while (0);
	return 0;
}

如果在主函数直接给宏函数赋常量,如SUM(5);则会报错,第一步替换:

do { 
	int sum = 0; 
	while (5 > 0) { 
		sum = sum + 5; 
		5--;   //5 = 5-1; error常量是不能修改的左值,可在刚开始定义一个变量,如int i = n; 后面用i计数和自减就不会报错
	} 
	printf("前n项和为:%d\n", sum); 
} while (0)
在这里插入图片描述
文章来源:https://blog.csdn.net/cs1395293598/article/details/135464950
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。