建网站视频教程,中山网站制作系统,WordPress小程序导航栏,wordpress判断为空指针函数
形如#xff1a;int* fun(int a, int b) 类比于#xff1a;int fun(int x, int y)、char fun(int x, int y) 本质上是函数#xff0c;只是返回值为int类型的指针#xff0c;以此类推可以有void*、char*、unsigned char*类型等指针#xff0c;类比于返回值是int …指针函数
形如int* fun(int a, int b) 类比于int fun(int x, int y)、char fun(int x, int y) 本质上是函数只是返回值为int类型的指针以此类推可以有void*、char*、unsigned char*类型等指针类比于返回值是int char void的函数。 返回值要取地址 注不可返回局部变量的地址
#include stdio.h
#include stdlib.h
#include string.h/*指针函数*/
char *init() //指针函数 即返回值是一个char *类型的函数
{// char str[32] {0}; //栈空间 函数结束会释放内存 不可返回地址char *str (char *)malloc(128); //堆空间 可以return str;
}
int main()
{char *s init();strcpy(s, hello);printf(%s,s);free(s);return 0;
}hello指针函数举例2
函数指针
形如int (*fun)(int a, int b) 本质上是指针只不过(*fun)指针指向一个函数指向的是一个int ???(int a, int b)函数 ???即为对应指向的函数名 调用方法 fun ??? (*fun)(1,2)
#include stdio.h/*函数指针 */void f1()
{printf(hello world\n);
}int add(int x, int y)
{return x y;
}int main()
{void (*p)(); //定义函数指针 定义一个函数类型的指针且没有参数和返回值p f1;p(); //通过函数指针调用函数 等价于f1()//int (*q)(int a, int b);//q add;int (*q)(int, int) add;printf(%d\n, q(1, 3)); //调用方式1printf(%d\n,(*q)(1,3)); //调用方式2return 0;
}指针数组
形如char *str[3] {“Monday”, “Tuesday”“Wednesday”}; 类比于char str[3]、或者int p[3] 本质上是数组只是类型上是char *指针类型类比于定义数组为int、char类型的数组。 数组内的数据是对应变量的地址。如下图所示str[0]就为char *类型的指针变量指向了内存地址为0x500(假设任取的地址值)。 上面是讨论数组里的值是什么另一方面讨论数组的地址切不可混淆读者若混淆建议类比于int或者char类型数组参考。 首先数组的数组名str显然是数组的首地址假设为0x1000在64位系统中指针占8个字节故str[1]即str1的地址为0x1008以此类推。
数组指针
形如char (str)[3] 类比于char * str、int str等 本质上是指针只不过是指向整个数组数组元素有3个每个都是char类型而int* str指针是指向int类型变量的指针。
#include stdio.hint main()
{char (*str)[3] NULL; //数组指针 指向数组那么要定义一个符合这个指针的数组char s[3] ab; //专门定义一个char类型的含有3个元素的数组//str s; //s指的是这个数组的第一个元素的首地址 故不可取str s; //s指的是整个数组的首地址printf(output result :%s, *str);printf(%p\n, str);printf(%p, str 1);return 0;
}