首页 > 代码库 > 【扩展知识2】学习一些重要的知识
【扩展知识2】学习一些重要的知识
【扩展知识二】学习一些重要的知识
【扩展目录】
1. 布尔型,浮点型、指针的变量与0值得比较
2. 类型转换
3. 关键字sizeof和strlen()函数
A:bool变量与0值得比较
布尔型,用于表示布尔值,即逻辑值TRUE(真)和FALSE (假)。在C语言中非零即为真,零就为假。
较合理的写法是:
//测试环境:win7_32+VC++6.0。有的编译器可能不识bool //bool变量与0,1的比较 #include <stdio.h> int main( void ) { boolbnum; //定义bool类型的变量 bnum=0; //赋值为0,即假 if(bnum ) { printf("假\n" ); } if(!bnum ) { printf("真\n" ); } return 0; }
B:float变量与零值得比较
较合理的比较:
//float变量与零值的比较 #include <stdio.h> #define PRECISION 0.000001 int main( void ) { floatscore= 0; if(( score>= -PRECISION ) && (score<= PRECISION ) ) { printf("score等于0\n" ); } else { printf( "score不等于0\n"); } return 0; }
C:指针变量与零值得比较
虽然还没学到指针,这先稍微提一下,后续再讲。
指针就是一个存放地址的变量。
int*ptt;
声明了一个整型指针ptr。ptr是指针,*ptr是ptr的地址里的值。
//指针变量与零值的比较 #include <stdio.h> int main( void ) { char*ptr= NULL; //定义一个char类型指针ptr,并初始化为NULL if(ptr== NULL ) //NULL在C中被定义为 0。 { printf( "YES\n" ); } else { printf("NO\n" ); } return 0; }
D:类型转换
( 1 )自动类型转换
高 double ←← float
↑ ↑
↑ long
↑ ↑
↑ unsigned
↑ ↑
低 int ←← char,short
[自动转换顺序表]
#include <stdio.h> int main( void ) { inta; intb; a=4.5; //浮点型数自定转换为int型 b='A'; //字符'A'也自动转换为int型 printf("%d\n", a ); // a= 4 printf("%d\n", b ); // b= 65 return0; }
( 2 )强制类型转换
//强制类型转换 #include <stdio.h> int main( void ) { inta= 1; intb= 2; intc= 3; floatx= 4.1; floaty= 5.9; a=( int )y; //把y强制转换为int型 b=( int )( x+ y ); //把x+ y的和在强制转换为int型 c=( int )x+ y; //c是先把x强制转换为int,在相加,和再隐式转换为int printf("a= %d\n", a ); printf("b= %d\n", b ); printf("c= %d\n", c ); return0; }
E: 函数strlen()和非函数sizeof的使用
( 1 )函数strlen()
原型:size_tstrlen ( const char * str );
返回C字符串(仅仅支持此类型)的长度。
//strlen()的使用 #include <stdio.h> int main( void ) { chararray[ ]= "zhijiandeweixiao"; //指尖的微笑 //array为数组的首个地址 printf("%s的长度为%d\n", array, strlen( array ) ); return 0; }
( 2 )非函数sizeof的使用
有时候我们要求int型数组的元素。
如int array[ ]= { 1,2,3, 4, 5, 6….};个数少时可以数,但是当个数特多时,我们就得交给计算机算了。但是在strlen只仅算字符串的个数。要为能数int型或float型数组的个数,就得自己开动脑子了。
有效方法如下:
//非函数sizeof的使用 #include <stdio.h> int main( void ) { intnum; intarray[]= { 1, 2, 3, 4, 5, 6, 7 }; //array为数组首地址 //array为数组首元素的首地址 //sizeof(array )== 28 个字节 //sizeof( array[ 0 ] )== 4 个字节 //所以sizeof(array )/ sizeof( array[ 0 ] )== 7,即数组元素个数 num=sizeof( array )/ sizeof( array[ 0 ] ); printf("sizeof( array )= %d\n", sizeof( array ) ); printf("sizeof( array[ 0 ] )= %d\n", sizeof( array[ 0 ] ) ); printf("sizeof( array )/ sizeof( array[ 0 ] )= %d\n", num ); return 0; }
注意事项:
- sizeof不能计算动态分配的数组大小!
- 当把数组作为函数的参数时,你无法在程序运行时通过数组参数本身告诉函数该数组的大小,因为函数的数组参数相当于指向该数组第一个元素的指针。
//非函数sizeof的使用2 #include <stdio.h> int main( void ) { intnum; intarray[]= { 1, 2, 3, 4, 5, 6, 7 }; //array为数组首地址 //array为数组首元素的首地址 //sizeof(array )== 28 个字节 //sizeof( array[ 0 ] )== 4 个字节 //所以sizeof(array )/ sizeof( array[ 0 ] )== 7,即数组元素个数 num=sizeof( array )/ sizeof( array[ 0 ] ); printf("sizeof( array )= %d\n", sizeof( array ) ); printf("sizeof( array[ 0 ] )= %d\n", sizeof( array[ 0 ] ) ); printf("sizeof( array )/ sizeof( array[ 0 ] )= %d\n", num ); return 0; }
运行结果:
sizeof( array )= 28
sizeof( array[ 0 ] )= 4
sizeof( array )/ sizeof(array[ 0 ] )= 7
//非函数sizeof的使用2 #include <stdio.h> void print( int array[] ) { int num; num= sizeof( array )/ sizeof( array[ 0 ] ); printf( "num= %d\n", num ); return ; } int main( void ) { intarray[]= { 1, 2, 3, 4, 5, 6, 7 }; print(array ); return 0; }
运行结果:
num= 1
有结果可知: 当把数组作为函数的参数时,数组参数相当于指向该数组第一个元素的指针,所以的大小为1,即首元素。
【指尖的微笑】错误在所难免,希望得到大家的指正^-^
转载时保留原文的链接http://codingit.howbbs.com和http://blog.csdn.net/mirrorsbeyourself
【扩展知识2】学习一些重要的知识