ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

C语言基础:指针数组 指针函数 函数指针

2026/8/6 22:06:49 拓冰建站 浏览量
C语言基础:指针数组 指针函数 函数指针 7、指针数组本质是数组该数组中保存的是指针语法定义了一个可以保存5个整形指针的数组整体占5*840字节 int *a[5]; 里面存放5个int* 类型的指针 char *p[5];1、定义指针类型 *数组名[元素个数]2.初始化char *p[5]{NULL}; 将5个char类型指针初始化成NULL char *p[5]{hello,world,how,are,you}; p[0]char *p[0]保存字符串常量hello的首地址 p[1]char *p[1]保存字符串常量world的首地址 ... char *p1hello; char *p2world; char *p2hi; char *p[3]{p1,p2,p3};3、指针数组和二维字符型数组的区别char str[3][100]{hello,world,how}; sizeof(str)300字节 char *pstr[3]{hello,world,how}; sizeof(pstr)3*sizeof(char *)24字节区别1.二维字符型数组中保存的是多个字符串本身指针数组中保存的是多个字符串的首地址2.要保存多个字符串用二维字符型数组要操作多个字符串用指针数组8.二级指针二级指针本质还是指针是一个指针变量的地址。int **指针名;----保存整形指针的指针char ** 指针名----保存字符型指针的指针C语言中有两个二级指针使用场景1.想要在被调函数中修改主调函数中的指针变量实参需要传递该指针变量的地址形参用二级指针接2.指针数组的数组名是一个二级指针实参传递指针数组的数组名时形参用二级指针接char *str[3]{hello,world,hi}; str[0]---char* strstr[0]---char**二级指针值传递当传递一个指针变量时无法在被调函数中修改主调函数的指针变量只可以使用指针变量地址传递参数是一个指针变量时可以在被调函数中修改主调函数中的指针变量9、指针函数指针函数本质是函数具有指针类型返回值的函数能被指针函数返回的指针1.不能返回局部变量的地址char str[32]hello; //不能返回 char *pstrhello; //可以返回2.具有静态生命周期的变量的地址可以被返回1.static修饰的静态变量的地址2.全局变量的地址3.字符串常量的地址4.可以返回通过参数传递给该函数的地址strcpystrcat5.可以返回堆区申请且没有被释放的空间地址#includestdio.h #includestring.h int a1000; void erji_poin(char **str) { *strworld; } char * fun() { static char str[100]how are you; //char *pstrhow are you; return str;//static修饰的静态变量的地址或字符串常量的地址 } int *fun2() { return a;//返回全局变量的地址 } int main() { char *strhello; erji_poin(str); puts(str); char *pNULL; pfun(); puts(p); int *pretNULL; pretfun2(); printf(%d\n,*pret); char src[100]I am fine; char dst[100]{0}; pstrcpy(dst,src); printf(p%p,p%s\n,p,p); printf(dst%p,dst%s\n,dst,dst); return 0; }10、函数指针函数指针本质是指针指向函数的指针函数函数的函数名为函数的入口地址语法返回值类型 *指针名形参表1.定义函数指针函数声明int fun(int , int )函数指针int (*pfun)(int , int );定义了一个函数指针变量该指针变量在内存中占8字节该函数指针可以指向《一个int类型返回值、两个int类型参数》的函数2.初始化int (*pfun)(int ,int ) NULL;3.赋值int add(int num1,int num2);{}int (*pfun)(int ,int ) NULL;pfunadd;4.函数指针调用函数函数指针名实参表5.应用回调函数将函数作为某个函数的参数传递被传递的函数称为回调函数。主要是为了解耦合即降低代码的耦合度关联度减少重复代码。