举个c语言函数内空指针的例子
可以这样写一个函数:
void func(void *ptr) { if (ptr == NULL) { printf("空指针\n"); } else { printf("非空指针\n"); } }
在函数内部,我们判断传入的指针是否为空指针,如果是,则输出“空指针”,否则输出“非空指针”。
c语言函数指针字符数组
C语言中函数指针与字符数组的使用
函数指针定义及调用方式
在C语言里,函数指针用于存储函数的入口地址。声明一个返回int
类型的函数指针,该函数接受两个整型参数的形式如下所示[^1]:
int (*funcPtr)(char *, char *);
此语句创建了一个名为funcPtr
的变量,它能够保存指向接收两个字符指针作为输入并返回整数值的函数。
字符数组及其初始化
字符数组可以用来表示字符串,在C语言中通常以空字符\0
结尾来标记串结束位置。下面是一段简单的代码片段展示如何定义和初始化字符数组[^4]:
#include <stdio.h>
#define MAX_LENGTH 50
// 定义比较两个字符串长度差别的函数
int compareStringLength(char *strA, char *strB){
int lengthDifference = strlen(strA) - strlen(strB);
return lengthDifference;
}
int main(){
// 初始化字符数组
char stringOne[MAX_LENGTH]="hello";
char stringTwo[MAX_LENGTH]="world";
printf("String one is \"%s\"\n",stringOne);
printf("String two is \"%s\"\n\n",stringTwo);
// 输出结果
}
结合函数指针操作字符数组的例子
这里给出一段完整的程序实例说明怎样利用上述提到的概念——即通过函数指针对字符数组执行特定的操作:
#include <stdio.h>
#include <string.h>
// 声明函数原型以便稍后赋给函数指针
void reverseString(char *);
int main() {
void (*operateOnStrings)(char *) = NULL; // 创建函数指针
operateOnStrings = &reverseString;
char myArray[]="example";
puts(myArray);
operateOnStrings(myArray); // 调用函数指针所指向的方法处理字符数组数据
puts(myArray);
return 0;
}
// 实现反转字符串功能的具体逻辑
void reverseString(char *inputStr){
int i,j=0,len=strlen(inputStr)-1,temp;
for(i=len;i>j;i--,j++){
temp=inputStr[i];
inputStr[i]=inputStr[j];
inputStr[j]=temp;
}
}
这段代码展示了如何定义、分配以及实际运用函数指针去改变字符数组的内容。当运行这个例子的时候,会先打印原始字符串,接着调用了由operateOnStrings
指向的reverseString()
方法对原字符串进行了逆序排列再输出一次修改后的版本。
C语言 三维函数指针数组 详细示例
在C语言中,三维函数指针数组可以用来存储一系列指向函数的指针,这些函数通常有相同的输入参数列表。这种结构在某些场景下非常有用,比如回调函数、事件处理等。下面是一个简单的示例:
#include <stdio.h>
// 定义一个返回整数并接受两个整数作为参数的函数原型
typedef int (*AddFunc)(int, int);
// 函数指针数组声明,三个元素,每个元素指向一个加法函数
AddFunc addFunctions[3] = {
// 第0个元素:基本的加法操作
(AddFunc)addBasic,
// 第1个元素:另一个自定义的加法操作
(AddFunc)addCustom,
// 第2个元素:第三个加法操作(这里为了演示,可以是NULL)
NULL
};
// 实现的基本加法函数
int addBasic(int a, int b) {
return a + b;
}
// 自定义的加法函数
int addCustom(int a, int b) {
return a * 2 + b;
}
// 使用函数指针数组
int main() {
int result;
if (addFunctions[0]) { // 检查是否为空指针
result = addFunctions[0](5, 3); // 调用第一个函数
printf("Result from addBasic: %d\n", result);
}
if (addFunctions[1]) {
result = addFunctions[1](5, 3); // 如果不为空,则调用第二个函数
printf("Result from addCustom: %d\n", result);
}
return 0;
}
在这个例子中,addFunctions
数组包含了三个函数指针,分别指向addBasic
、addCustom
这两个自定义函数。在main
函数中,通过索引访问数组并动态地调用了相应的函数。
相关推荐













