函数与指针

一、函数

函数是C程序的基础模块,是用于完成特定任务的程序代码单元。

 

1,分类:

(1)系统函数:即库函数,由辨析题提供的,用户不必自己定义这些函数,可以直接使用它们。如printf()

(2)用户定义函数:用以解决用户的专门需要。

2,作用:

函数的使用可以省去重复代码的编写,降低代码的重复率。

3,调用(5要素):

头文件:包含指定的头文件

函数名字:函数名字必须和头文件声明的名字一样

功能:需要知道此函数的作用

参数:参数类型匹配

返回值:更具需要接受返回值

 

例  产生随机数:

time(time_t*t)

//获取当前系统时间

//返回值:当前系统时间,time_t相当于long类型,单位为毫秒

 

void srand(unsigned int seed)

//用来设置rand()产生随机数时的随机种子

//如果每次seed相等,rand()产生随机数相等

 

int rand ()

//返回一个随机数

#include<stdio.h>
#include<time.h>
#include <stdlib.h>
int main
{
    srand((size_t)timer(NULL));
    //time_t timer = time(NULL);
    //srand((size_t)timer);
    //添加随机数种子
    
    for(int i=0;i<100;i++)
    {
        printf("%d",rand());
        //约束:rand()%100 余数0-99    rand()%51+50  余数50-100
    }  
}

 

4,定义函数:

返回值类型 函数名(参数列表)
{
    代码体
    return a;
    //返回值可以是数字,也可以是表达式
    //一个return只能返回一个返回值
    //返回值的类型取决于返回值类型 
}

 

5,函数的形参和实参:

形参只能在该函数体才有效

单向传递,只能实参传给形参

 

6,void定义:无参数无返回值的定义函数

 

7,分类两种形式:

(1)先定义自定义函数再定义主函数——不需要声明

(2)先定义主函数再定义自定义函数——需要声明

 

8,声明和定义的区别:

(1)声明变量不许用建立存储空间,定义函数需要建立存储空间

(2)声明包含定义,定义是声明的一个特例

 

 

二、指针

 

1,内存含义:

存储器:计算机的组成中,用来储存程序和数据,辅助CPU进行运算处理的重要部分

内存:内部存贮器,暂停程序/数据

外存:外部存储器,长时间保存程序/数据

 

内存是沟通CPU与硬盘的桥梁:暂存CPU中的运行数据,暂存与硬盘等外部存储器交换的数据

内存地址:即是内存编号

将内存抽象成一个很大的一堆数组

编码就是对内存的每一个字节分配一个32位或64位的编号(与32位或者64位处理器相关)

如:char:占一个字节分配一个地址

int:占四个字节分配四个地址

 

 

2,指针的定义和使用:

(1)定义:指针类型:数据类型*

int a=0xaabbccdd 存储顺序:dd→aa

万能指针:

可以接受任意类型变量的内存地址

在通过万能指针修改变量的值时,需要找到变量对应的指针类型

 

(2)定义指针变量存储变量地址:

& 取地址运算符 升高维度

* 取值运算符 降低维度

int a = 10;
int* p;   
p=&a;  //将a的地址(指针)赋予p
printf("%p\n",&a);
printf("%p\n",p);
// 打印出来的地址相同

*p=100;   //p地址的值被赋予100
printf("%p\n",a);
printf("%p\n",*p);
//打印都为100 

若直接写int* p=100;表示的意思是把100这个地址赋予指针p

int* p=NULL;空指针是指内存地址编号为0的空间

操作空指针对应的空指针一定会报错 但是可以用作条件判断

 

(3)指针数据类型的大小:

printf("%d\n",sizeof(char*));
printf("%d\n",sizeof(int*));
printf("%d\n",sizeof(short*));
printf("%d\n",sizeof(long*));
printf("%d\n",sizeof(long long*));
printf("%d\n",sizeof(float*));
printf("%d\n",sizeof(double*));
//x64下都是8字节大小    x84(32位)下都是4字节大小

所有的指针类型存储的都是内存地址,内存地址都是一个无符号十六进制整型数

 

3,const修饰:

修饰指针类型:

(1)可以修改指针变量的值 

(2)不可以改变指针指向内存空间的值

const int* p=&a;
  p=&b;    //ok
 *p=100;   //err

 

修饰指针:

(1)不可以修改指针变量的值

(2)可以改变指针指向内存空间的值

int a=10,b=20;
int* const p=&a;
 p=&b;     //err
*p=200;    //ok

 

修饰指针类型和指针变量:

不可以修改指针变量的值 和指针指向内存空间的值

 

*pp是一级指针的值     **pp是二级指针的值

可通过低级指针修改指针的值

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值