c语言函数变量类型不定 c语言定义不变量

C语言怎么实现函数不定参数

C语言中定义了va_list, va_start( ), va_arg( ), va_end( ) 这样一组宏来处理可变参数问题。

网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了开鲁免费建站欢迎大家使用!

可以参考printf的声明,创建自己的实现函数。示例:

#includestdio.h

#includestdarg.h

void va_fun(int start,...)

{

va_list arg_ptr;

int nArgValue = start;

int nArgCount = 1;

va_start(arg_ptr,start);

while(nArgValue != -1)

{

printf("arg %d is:%d/n",nArgCount,nArgValue);

nArgValue=va_arg(arg_ptr,int);

++nArgCount; 

}

return; 

}

main()

{

va_fun(5,1,7,-1);

printf("................/n");

va_fun(2,4,-1);

printf("................/n");

va_fun(-1);

printf("................/n");

//va_fun(); 可变参数函数最少要有一个参数。

}

C语言 参数的个数是确定的,但是参数的类型不太确定,请问怎么实现呀?很急,在线等....

应该可以的,是对a/b两个指针作为起始指针的链表来排序是吧?先分析一下:

1,a,b是两种类别的结构体指针;

2,num,name 是不同结构体里面的不同类型的成员名称;

3,因为成员类型不同,所以排序的策略肯定也不同,比方 num 是数字,name 是字符串,需要使用不同的策略来排序,如数字的大小/字符串的大小等等;

所以可以这么考虑来设计排序函数的构造:

a,需要传入一个指针,可以用 void *,来指向不同的结构体构成的链表;

b,传入要排序的字段在该结构体中的偏移植 offset ,注意结构体的对齐方式和具体的处理器架构和操作系统有关系,尽量使用可移植的方法;

c,用函数指针的形式传入所需要的比较策略,比方数字大小比较函数,字符串大小比较函数之类的。

这样实现可以适针对任意结构体中任意类型的字段,按照任意的比较策略来实现排序。你可以在这个排序函数中使用不同的排序算法,如插入排序/冒泡排序/归并排序之类的。

这个问题很有意思,:) 我们会介绍给我们的同学。欢迎你到 JulianTec 的邮件列表中讨论这样的问题。

在c语言中用什么函数判定一个变量的类型

在c语言中用没有函数判定一个变量的类型,可以使用sizeof来判断变量大小。

示例:

#include stdio.h

#include stdlib.h

int main(int argc,char **argv)         //主程序

{

//对C语言内置类型的所占字节数的测试

printf("size of char is: %d\n",sizeof(char));       //字符型数据所占字节数 、

printf("size of short is: %d\n",sizeof(short));     //短整形数据所占字节数

printf("size of int is: %d\n",sizeof(int ));        //整形数据

printf("size of short int is: %d\n",sizeof(short int)); //短整形

printf("size of long int is: %d\n",sizeof(long int));    //长整形数据

printf("size of float is: %d\n",sizeof(float));          //浮点型数据

printf("size of double is: %d\n",sizeof(double));        //双精度数据

//对字符及字符串数组所占字节数的测量

char a[] ={'a','b','c','d','e'};

printf("size of a[] is: %d\n",sizeof(a));               //输出数组a[]所占字节数

char b[]={"abcde"};                                     //初始化字符串b

printf("size of b[] is: %d\n",sizeof(b));               //数组b[]

char c[][3]={{'a','b','c'},{'d','e','f'},{'g','h','i'},{'j','k','l'}};  //初始化二维字符型数组

printf("size of c[][] is: %d\n",sizeof(c));                             //二维数组c所占字节数

printf("size of c[0] is: %d\n",sizeof(c[0]));                           //二维数组中的某行所占的字节数,例如第0行

printf("size of c[0][0] is: %d\n",sizeof(c[0][0]));                     //某行某个元素,例如第0行第0个元素

//对指针所占字节数的测量

char *p=0;

printf("size of *p is: %d\n",sizeof(p));                       //字符型指针

system("pause");

return 0;

}

扩展资料

使用sizeof()计算数组长度

将sizeof用于 expr是并没有计算expr的值。特别是在sizeof *p中,指针p可以是一个无效地址,因为不需要对p做解引用操作。

对char类型或值为char类型的表达式做sizeof操作结果为1。对引用类型做sizeof操作,将返回存放此引用类型对象所需的内存空间大小。

对指针做sizeof操作,将返回存放指针所需的内存大小,注意,如果要获取该指针指向对象的大小,则必须对该指针进行解引用。对数组做sizeof操作等效于对其元素做sizeof操作的结果乘上数组元素的个数。

因为sizeof返回整个数组在内存中的存储长度,所以用sizeof数组的结果初一sizeof其元素类型的结果,即可求出数组元素的个数:int sz = sizeof(ia)/sizeof(*ia);

通常将8位的块作为一个字节,32位或4个字节作为一个 “字”。一般的short为半个机器字长,int为一个机器字长。


本文标题:c语言函数变量类型不定 c语言定义不变量
浏览路径:http://ybzwz.com/article/dosidee.html