自学内容网 自学内容网

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

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

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!