强制类型转换相关概念
来源:互联网 发布:淘宝联系卖家客服 编辑:程序博客网 时间:2024/04/28 13:35
来自:c专家编程.P187.
强制类型转换(cast)这个术语从C语言一诞生就开始使用,即用于类型转换,也用于消除类型歧义。可以很容易地把某种类型的数据强制转换为基本类型的数据:在括号里写上新类型的名称,然后把它们放在需要转化类型的表达式的前面。在强制转换一个更为复杂的类型时,可以采取如下的方法:
1、 一个对象的声明,它的类型就是想要转换的结果类型;
2、 删去标识符以及任何类似extern之类的存储限定符,并把剩余的内容放在一对括号里面;
3、 把第二步产生的内容放在需要进行类型转换的对象的左边。
作为一个例子,程序员经常发现他们需要强制类型转换以便使用qsort()库函数。这个库函数接收4个参数,其中一个是指向比较函数的指针,qsort()函数的声明如下:
void qsort(void *buf,size_t num,size_t size,int(*comp)(const void *ele1,const void *ele2));
当调用qsort函数时,可以向它传递一个你所喜欢的比较函数。你的比较函数将接收实际的数据类型而不是void*参数,就像下面这样:
int intcompare( const int *i, const int *j )
{
return *i - *j;
}
这个函数并不与qsort()的comp()参数完全匹配,所以要进行强制类型转换。假定有一个数组a,它具有10个元素,需要对它们进行排序,根据上面列出的3个步骤,可以发现对qsort()的调用将会是下面这个样子:
qsort( a, 10, sizeof(a[0]), (int(*)(const void *, const void *))intcompare );
#include<stdio.h>
#include<stdlib.h>
//对整型数进行排序
int intcompare( const int *i, const int *j )
{
return *i - *j;
}
//对double类型的数进行排序
int doublecompare( const double * i, const double * j )
{
if( *i > *j )
return 1;
else if( *i < *j )
return -1;
else
return 0;
}
int main()
{
int base[]={ 3, 102, 5, -2, 98, 52, 18, 56, 38, 70 };
int i, len = sizeof(base)/sizeof(base[0]);
for( i = 0; i < len; i++ )
{
printf("%d, ", base[i]);
}
printf("/n");
qsort( base, len, sizeof(base[0]), (int(*)(const void *, const void *))intcompare );
for( i=0; i < len; i++)
{
printf("%d, ", base[i]);
}
printf("/n/n");
double base1[]={1.2, 2.6, 3.4, 8.6, 14.3, 0.2, 7.9, 1.6, 9.2, 10.8, 5.55 };
int len1 = sizeof(base1)/sizeof(base1[0]);
for( i = 0; i < len1; i++ )
{
printf("%5.2f, ", base1[i]);
}
printf("/n");
qsort( base1, len1, sizeof(base1[0]), (int(*)(const void *, const void *))doublecompare );
for( i=0; i < len1; i++)
{
printf("%5.2f, ", base1[i]);
}
return 0;
}
- 强制类型转换相关概念
- [强制类型转换]C语言中的强制类型转换相关
- C语言模糊基础概念之强制类型转换
- 关于强制类型转换:强制类型转换
- 类型转换&&类型强制转换
- 类型转换&&类型强制转换
- 类型转换(向下强制)
- c++强制类型转换
- 强制类型转换
- 关于强制类型转换
- c++强制转换类型
- C++ 强制类型转换
- c++强制类型转换
- 强制类型转换
- C++强制类型转换
- java强制类型转换
- c++强制类型转换
- javascript 强制类型转换
- MFC学习笔记(1)
- Linux中source命令,在Android build 中的应用
- 字符串常量
- 面向对象软件设计遵循的原则
- SEAM学习笔记(三)
- 强制类型转换相关概念
- php编译gd出错!(已解决)
- malloc()、calloc()、realloc()
- 开始学struts。
- 常见的动态内存错误
- 在程序退出main()函数之后,还有可能执行一部分代码吗?
- 总线错误和段错误相关概念
- const与数组声明
- 字符串拷贝和内存拷贝函数