首页 > 编程知识 正文

(c语言你学习日记-void指针2)

时间:2023-05-04 10:19:13 阅读:123291 作者:4930

指针

一、概念:

1 .将数据放置在与变量对应的存储器的地址

2 .数据类型和变量类型一直是

3 .地址是指针

二、新的数据类型、指针类型

指针变量可以定义被称为指针变量的变量,指针变量可以用来存储指针(地址)

指针变量大小:

逻辑性:变量的种类有多少,可以根据对应的数据的种类来区分。 那指针也一样

可以通过地址类型来区分指针变量的类型

三.存储整形指针变量、整形变量的地址

定义整形指针变量

int *p; //没有赋值只是定义,可能会出现野针

int main () { int *p; int a=0; p=a; 存储在printf(a的地址) p、p中的数据为) p )、a、p ); //p时的p自身的地址(//结果a的地址0x7ffff057f1fc、保存在p中的数据为0x7ffff057f1fc整形指针变量的初始化:

int a=10;

int *p=a;

指针变量的大小: sizeof (

int main () { int *p; char *q; 短* o; printf(int*、%ldchar*、%ldshort*、%ld '、sizeof(p )、sizeof(p )、sizeof(p ) ); //结果为int*,8char*,8short*,8,表示指针变量的大小都相同。

*p取对应的常数,*p操作对应的值也变化

四.向一级指南申请空间

malloc、calloc、申请合法空间

自由,释放空间

#include stdlib.h

void * :万能指针;

void*malloc(size_tsize );

语音自由(语音* Ptr );

void*calloc(size_tnmemb,size_t size ); //

形参一: nmemb存储块的个数,

形参二: size,各块的大小

void*realloc(void*ptr,size_t size );

int *p; p=(int* ) malloc ) Sizefo(int ); 申请//4字节的空间,(int ) )强制转换,malloc返回了起始地址………………………free(p ); 释放刚才分配的空间1 .如何使用1.mallloc

((返回型) malloc (申请空间大小) ) )。

用malloc函数的返回值判断空间分配是否成功(malloc执行是否成功),返回值为NULL时执行失败

Bzero(p,10*sizeof ) char ); 内存均为“”;

if(p==null ) ) printf )“空间分配失败,借钱失败”返回- 1; (2.calloc函数

函数用于动态分配内存空间并将它初始化为0

3.void *指针(万能指针) /

void *函数可以返回所有v:int char p

void函数没有返回值,什么也返回不了

如果存在与void指针变量对应的有效存储器区域(该变量中保存了有效区域的起始地址) )。

int*p=(int* ) malloc ) sizeof (int );

*p=110; //正确

void*p=malloc(10;

*p=10; //错误的使用方法,void*指针是固定的类型,不能直接赋值或引用。

malloc分配的空间真的在堆中,并且在使用局部变量后不会释放

除了处理和指针外,建议使用void*作为函数的返回值或函数的参数

4 .函数指针

指针存储函数的地址,但实际上函数也是变量

补充

函数名称表示函数地址函数的名称,也可以表示函数地址函数指针的作用;

存储函数的地址。 可以通过引用函数指针变量间接调用函数

函数指针变量的定义

int Fun (;

int(*fun_p ) )=Fun;

int(*fun_p ) );

fun_p=Fun

int *Fun (;

int*(*fun_p ) )=Fun;

int*(*fun_p ) );

* fun_p=Fun

使用方法

() fun_p ) ); //得到函数的名称

fun_p (;

Fun ();

eg :

/* @ author : your name * @ date :2021-03-1709336034336025 * @ last edit time :2021-03-1710336036058 * @ last eddit @ description : inusersettingsedit * @ file path :yueqianc _ daima.13。 2.c */# include stdio.h # include stdlib.h # include time.h void * fir (int (* p ) [],char a ); int main () int ) ) p ) []; p=(int (* [ ] malloc ) sizeof ) ) int ) * 4); if(p==null ) ) perror('malloc ); 返回- 1; (} char a; void*(q ) ) int ) p ) [],char a )=Fir; //使用函数指针((q ) ) p,a ); for(intI=0; i 4; I () printf('%d(n ),* ) ) ) p ) I ); (自由) p; 返回0; }void*fir(int ) p ) [],char a ) ) a='c '; printf(%c(n ),a ); srand (时间(0); for(intI=0; i 4; I () ) () p ) I )=rand ) % 100; //排序//for(intI=0; i 4; I////for(intj=I; j 4; j(//)/if () p ) [ I ] (p ) ) j ) )/inttemp=) ) I ); //(p ) [I]=) p ) [j]; //(p ) [j]=temp; ////////////希尔排序for(intstep=2; 步骤0; 步骤() for ) intI=step; i 4; I ) for(intj=I-step; j=0; j-=step((if ) ) p ) [j] (p ) ) j-=step ) ) inttemp=) p ) [ j ]; (p ) [j]=) p ) [j step]; (p ) [ j步]=temp; } } }返回0; }

水平。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。