#c语言#随机数#函数以及指针部分基础

   在C语言当中必须掌握的知识,随机数,函数以及指针的定义和应用

1.随机数

随机数的产生

在C语言中,一般使用头文件<stdlib.h>中的rand()函数来产生随机数,它的代码一般是:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a = rand();
	printf("%d\n", a);
	return 0;
}

运行结果举例:43.

多次运行发现产生的随机数相等,其实我们可以把一次产生随机数当成一次播种,而产生的随机数就是一个“种子”,每次计算机运行后产生的随机数不会变化。

重新播种

我们需要srand()来进行重新“播种”,而srand()函数需要一个unsigned int类型参数,功能是用来设置rand()产生随机数的随机种子

void srand(unsighed int seed)

在实际应用中,我们常用<time.h>中的time()函数来进行时间的运算,随着时间的进行,就会产生不同的种子,经常和for函数来运用。如:

#include <stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
	int i;
	srand((unsigned int )time(NULL));
	for (i = 0; i < 10; i++)
	{
		printf("%d\n", rand());
		}
	return 0;
}

而在实际运用中,我们需要将随机数限制在某一个区间内,那么,就需要用%取余数来将产生的随机数限制在某一空间内,如,产生二十个在(0~20)的随机数。

	int i;
	srand((unsigned int )time(NULL));
	for (i = 0; i < 20; i++)
	{
		printf("%d\n", rand()%20+1);
		}

注意:NULL是和0都是一样的,但是为了目的,用途和容易识别的原因,NULL用于指针和对象,0用于数值。(注意大小写)

2,函数的定义和使用

函数定义一般形式

返回值类型 函数名(函数列表)
{
   代码体
   return 0;
{

在函数定义过程中,main()函数中被调用的数值被称实际参数(实参)有实际数值,而在被调函数中的参数是形式参数(形参),没有实际数值,实参和形参是不同的单元,调用结束后,形参单元被释放,能够继续接收下一个实参调过去的值。

举例:

#include <stdio.h>
int main()
{
	int max(int x,int y);
	int a = 20, b = 10;
	int c = max(a, b);
	printf("%d\n", c);
	return 0;
}
int max(int x, int y)
{
	return x + y;
}

也可以把被调函数写在main()函数的前面,这样就不用在main()中声明。

注意:以以上的例子为例,在max函数中,x和y,已经被定义了,在max()函数中可以直接使用,不需要重复定义,而在max函数体中,也需要用到x和y这两个形参来进行计算;在main()函数中,需要调用的函数做声明时要有结束符号“;”。

多文件编辑

在编辑文件中,我们可能会使用到多文件编辑,多文件编辑中,需要在头文件中进行函数的声明,那么其他相应的函数就需要定义,然后在主函数的头文件中加入include<xxx.h>(xxx表示头文件的名字)

如:

max.h头文件

#pragma once
int max(int x, int y);

max.c调用函数

int max(int x, int y)
{
	return x + y;
}

main.c主函数

#include <stdio.h>
#include"max.h"
int main()
{

	int a = 20, b = 10;
	int c = max(a, b);
	printf("%d\n", c);
	return 0;
}

在编写头文件时,我们常用

#pragma once
声明部分

#ifndef _SOME_H_
#DEFIME _SOME_H_
 
声明部分

#endif

来防止头文件重复。

指针定义和应用

我们在编写代码时,会常用到指针,而指针的定义,和其他字符类型的定义相似。

int* p
char* p
float* p
long* p
long long* p
short* p
double* p

以上都是指针类型,我们使用指针时,要将指针类型设成对应的数据类型。

在指针的使用过程中,我们会用到符号“*”和”&“,符号“*”是取值运算符,是降维度的,而“&”是取地址运算符,是升维度的,我们可以将定义的一般字符类型,如(int,char)等,当成是最低的维度常用用法,*指针变量,&变量名。

int main()
{
	int* p;
	int a=10;
	p = &a;
	printf("%p\n", p);

}

在以上代码中,我们把指针变量p当成是整形变量a的上一个维度,那么,就能理解,&是升维度,*是降维度的这一说法。

在32位操作系统下,所有指针类型都是4个字节大小

在64位操作系统下,所有指针类型都是8个字节大小

野指针

野指针是指指针变量指向一个未知的空间,野指针是存在的,而操控野指针对应的内存空间可能会出错,操作系统将0—255作为系统占用不允许访问操作。

指针变量也是变量,是变量就可以任意赋值,但是,任意数值赋值给指针变量都是没有意义的,因为这样的指针变成了野指针,而野指针指向的区域是非法内存的区域。

如:

int* p;
p=100;

这样的指针变量编译时会产生错误。

空指针

空类型就是void,自然,空类型指针就是void *

void * 可以指向任何类型对象的地址,表示这是一个指针,和地址值有关,但不知道存储在此地址上的对象的类型。

如:

int a=10;
char ch='a';
float b=1.0;
void* p1=&a;
void* p2=&ch;
void* p3=&b;

所以在取空类型指针所指向的值的时候,应将空类型指针转换为对应的指针类型

如:

void* p1;
int a1=*((int*)p1)

意思是将p1从空指针转化为int*类型,再取转化后的p1的值。

const修饰指针

const能够修饰指针类型和指针变量。

当const修饰指针变量时,指针变量不能改变,当const修饰指针类型时,指针类型不能改变。

const int* p;//const修饰指针类型,指针类型不可转变,而p指针变量能改变

int* const p1;//const修饰指针变量,指针变量不能改变,而指针类型可以

可以熟计为const修饰离他最近的变量或类型。

文章转载至

http://blog.bools.cn/archives/178

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值