指针
一、概念:
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; }
水平。