c语言一小部分知识点

1.条件编译

定义 xxx.h头文件时

#ifndef _XXX_H
#define _XXX_H

头文件的内容

#endif

防止重复定义

2.随机数

#include <stdlib.h>
#include <time.h>

srand((unsigned int)time(NULL))//设置随机时间种子
int a;
a = rand() % 900 + 100//设置的随机数在100到1000之间。

3. visual studio 2019的scanf

使用scanf出现问题时,我们可以在最开始,记得是最开始定义一个
#define _CRT_SECURE_NO_WARNINGS
这样他就不会报错了。

4.函数指针

函数的指针指的是一个函数在编译时被分配的入口地址,这个地址被称为该函数的指针。可以用一个指针变量存放函数的指针,从而让该指针变量指向一个函数。然后,可以通过指针变量调用该函数。指向函数的指针变量与前面介绍的指针变量不同

指向函数的指针变量的定义格式:
函数类型 (*指针变量)(形参列表);

例子1

#include <stdio.h>

int fun(char tring[])			/*函数fun统计字符数组tring中英文字母的个数*/
{
	int z = 0, k;

	for (k = 0; tring[k] != '\0'; k++)
	{
		if ('a' <= tring[k] && tring[k] <= 'z' || 'A' <= tring[k] && tring[k] <= 'Z')
		{
			z++;
		}		
	}

	return (z);
}

int main()
{
	int (*pf)(char tring[]);		/*定义pf为函数指针变量,指向有1个数组为参数的函数*/
	char tring[80];
	int n;
	pf = fun;						/*pf指向函数fun*/

	scanf("%s", tring);				/*从键盘输入一串字符(小于80个)存放在数组tring中*/
	n = (*pf)(tring);				/*调用函数fun,在”pf =  fun;“前提下,(*pf)等价于fun*/

	printf("%d\n", n);


	return 0;
}

例子2

#define _CRT_SECURE_NO_WARNINGS 

#include <stdio.h>
#include <math.h>

float f1(float x)		/*定义函数f1*/
{
	float f;
	f = x;
	return f;
}

float f2(float x)		/*定义函数f2*/
{
	float f;
	f = 2 * pow(x, 2) - 1;
	return f;
}

float f3(float x)		/*定义函数f3*/
{
	float f;
	f = 4 * pow(x, 3) - 3 * x;
	return f;
}

float f4(float x)		/*定义函数f4*/
{
	float f;
	f = 8 * pow(x, 4) - 8 * pow(x, 2) + 1;
	return f;
}

void cheby(float (*f)(float))	/*定义函数cheby*/
{
	float x, result;

	printf("input x:\t");
	scanf("%f", &x);

	result = (*f)(x);			/*调用cheby时,f指向哪个函数,(*f)(x)就是调用哪个函数*/

	printf("reslut = %f\n", result);
}

int main()
{
	int n;

	printf("input n(n的范围为1~4):");
	scanf("%d", &n);

	if (n == 1)		cheby(f1);			/*f1的入口地址传给函数cheby的形参f*/
	if (n == 2)		cheby(f2);			/*f2的入口地址传给函数cheby的形参f*/
	if (n == 3)		cheby(f3);			/*f3的入口地址传给函数cheby的形参f*/
	if (n == 4)		cheby(f4);			/*f4的入口地址传给函数cheby的形参f*/
}

5. 返回指针值的函数

调用一个有返回值的函数,可以返回一个int型或float型或char型的值。实际上调用一个有返回值的函数也可以返回一个指针类型的值,即返回一个地址。
格式:
函数类型 * 函数名(形参表列)

例子

#define _CRT_SECURE_NO_WARNINGS 

#include <stdio.h>

int* find(int n);	/*函数声明,该函数find返回指针值*/

int main()
{
	int k, * p;

	printf("请输入要查找的一个正整数:");
	scanf("%d", &k);

	p = find(k);				/*p里面存放着的地址就是那个值*/

	if (p == NULL)
	{
		printf("%d在数组中不存在。\n", k);
	}
	else
	{
		printf("在数组中,正整数%d第一次出现的地址是:%d。\n", k, p);
	}

	return 0;
}

int* find(int n)	/*定义返回指针值的函数find*/
{
	int a[20] = { 12,24,33,47,18,67,57,84,96,10,13,47,33,64,15,76,17,88,33,20 };
	int i, * pa;
	pa = a;
	for (i = 0; i < 20; i++, pa++)
	{
		if (*pa == n)
		{
			return pa;		/*返回查找到的正整数的地址*/
		}
	}

	return NULL;			/*若循环结束没有找到,返回空指针*/
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值