首页 > 代码库 > 【扩展知识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; 
}


注意事项:

  1. sizeof不能计算动态分配的数组大小!
  2. 当把数组作为函数的参数时,你无法在程序运行时通过数组参数本身告诉函数该数组的大小,因为函数的数组参数相当于指向该数组第一个元素的指针。

 
//非函数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.comhttp://blog.csdn.net/mirrorsbeyourself

【扩展知识2】学习一些重要的知识