c-关于C函数指针和可变参数函数问题

问题描述

关于C函数指针和可变参数函数问题
以下程序段在linux用户空间执行成功,在内核空间执行失败,目前没有查清失败原因,所以请高手帮忙看一下!

在用户空间和内核空间分别执行以下程序段
函数定义:
int test_func(int a void* b)
{
printk(""a = %dn"" a);
printk(""b = %pn"" b);
return 1;
}

用指针调用函数:
int a = 0;
int (*func)(int ...); /* 定义可变参数函数的指针,目的是用它调用不同类型的函数 /
int *b = &a;
func = test_func;

rv = func(1 &a); / 使用指针调用函数 */
return rv;

该程序在用户空间执行正常:
liwei: a = 1
liwei: b = 0xbfe9cea8

在内核空间执行结果为:
[196491.020030] a = -1040203972
[196491.020041] b = (null)
参数没有被正确传递,为什么呢?

时间: 2024-10-01 08:33:53

c-关于C函数指针和可变参数函数问题的相关文章

C语言“…”占位符及可变参数函数

C语言函数的参数传递总是固定了个数,那么有没有传递任意个数参数的方法呢?在C++中,函数重载提供了多种参数传递的解决办法,但也不是任意参数个数.事实上,C语言是提供任意数量参数的解决方案的. printf(),scanf()等就是这样一类可支持任意参数个数变量的函数,以下是printf的用法示例. 1 printf("%d",x); 2 printf("%f",y); 3 printf("Hello my name is %s", name);

C语言可变参数函数详解示例_C 语言

先看代码 复制代码 代码如下: printf("hello,world!");其参数个数为1个.printf("a=%d,b=%s,c=%c",a,b,c);其参数个数为4个. 如何编写可变参数函数呢?我们首先来看看printf函数原型是如何定义的.在linux下,输入man 3 printf,可以看到prinf函数原型如下: 复制代码 代码如下: SYNOPSIS#include <stdio.h>int printf(const char *form

class-c语言定义一对一对的可变参数函数

问题描述 c语言定义一对一对的可变参数函数 fund(type_1 data_1 type_2 data_2 ...); 类似这样的函数怎样定义. 解决方案 http://www.cnblogs.com/MarvinGeng/archive/2012/07/19/2598923.html 解决方案二: 定义一个参数数组作为一个参数 解决方案三: typedef struct field_pad{ UINT1 type; UINT1 len; INT1 pad[62];}field_pad_t;

Swift中的可变参数函数介绍_Swift

可变参数函数指的是可以接受任意多个参数的函数,我们最熟悉的可能就是 NSString 的 -stringWithFormat:方法了.在 Objective-C 中,我们使用这个方法生成字符串的写法是这样的: 复制代码 代码如下: NSString *name = @"Tom"; NSDate *date = [NSDate date]; NSString *string = [NSString stringWithFormat:                 @"Hell

谈函数指针(全局/类成员函数)和函数对象

函数指针(全局函数/类成员函数).函数对象(Function object) 一. 函数指针类型为全局函数. #include "stdafx.h"#include <iostream>using namespace std;class TestAction;typedef void (*fp)(int); void Drink(int i){ cout<<"No. "<<i<<" drink..."

C语言中的可变参数函数的浅析(以Arm 程序中的printf()函数实现为例) .

我们在C语言编程中会遇到一些参数个数可变的函数,一般人对它的实现不理解.例如Printf():   Printf()函数是C语言中非常常用的一个典型的变参数函数,它 的原型为: int printf( const char* format, ...); 它除了一个参数format固定外,后面的参数的个数和类型是不确定的,如下列三种调用方法: 1.    printf("%d\n", i); 2.    printf("%s\n", "Hello World

标C编程笔记day06 动态分配内存、函数指针、可变长度参数

动态分配内存:头文件 stdlib.h     malloc:分配内存     calloc:分配内存,并清零     realloc:调整已分配的内存块大小     示例:         int *p=(int *) malloc(3*sizeof(int));//分配内存,成功返回首地址,失败返回NULL         free(p);p=NULL;//释放分配的内存,并修改指针的值,避免出现野指针(指向一个地址,但地址已被回收) const 与指针:     const int *p;

C语言中实现可变参数函数

通过stdarg.h头文件为函数提供了定义可变参数列表的能力.声明一个可变参数的函数类似: void f1(int n,...); 其中n表示参数列表个数,而用省略号来表示未知参数列表.stdarg.h中提供了一个va_list类型,用于存放参数.一个大概的使用过程类似: void f1(int n,...) {    va_list ap;    va_start(ap,n);   //初始化参数列表    double first=va_arg(ap,double);  //取第一个参数  

结构体的函数指针-结构体的函数的指针问题

问题描述 结构体的函数的指针问题 我在a.h中定义了结构体 typedef struct link_t{ int data; struct link_t* prior; struct link_t* next; }Node_t,Link_t; typedef struct{ void (*destory_link)(Link_t head); link_t (*creat_link)(int length); Node_t* (*delete_node)(Node_t node); Node_t