几个常用C语言函数的分析

本文为读书笔记整理而来

 

1、内存复制函数

memcpy( void *pvTo , void *pvFrom , size_t size )

{

byte *pbTo   = ( byte * )pvTo ;

byte *pbFrom = ( byte * )pvFrom ;

 

assert ( pvTo != NULL && pvFrom != NULL ) ;

while ( size-- > 0 )

    *pbTo++ = *pbFrom++ ;

return ( pvTo ) ;

}

分析:

assert是一个调试用的宏,在ANSIassert.h中定义的。

 

复制一个不重叠的内存

memcpy( void *pvTo , void *pvFrom , size_t size )

{

byte *pbTo   = ( byte * )pvTo ;

byte *pbFrom = ( byte * )pvFrom ;

 

assert ( pvTo != NULL && pvFrom != NULL ) ;

assert ( pvTo >= pvFrom + size || pvFrom >= pvTo + size ) ;

while ( size-- > 0 )

    *pbTo++ = *pbFrom++ ;

return ( pvTo ) ;

}

 

2、字符串复制函数

Char * strcpy (char *strDest , const char *strSrc)

{

Char *address = strDest;

assert ( strDest != NULL && strSrc != NULL ) ;

while ( ( *strDest++ = *strSrc++ ) != ‘\0’ );

return address;

}

 

3、字符串比较

int strcmp ( const unsigned char * strLeft , const unsigned char * strRight )

{

assert (strLeft!= NULL && strRight!= NULL ) ;

for ( ; *strLeft == *strRight ; strLeft++ , strRight++ )

{

    If ( *strLeft == ‘\0’ )                 //字符串相等

        Return 0 ;

}

Return ( ( *strLeft < *strRight ) ? -1 : 1 ) ;   //字符串不相等

}

分析,int strcmp ( const char * strLeft , const char * strRight ),当strLeftstrRightchar类型指针时,可移植性就不好,因为有的操作会使用符号位。

 

4、把一个有符号数转换成字符串

void UnsToStr ( unsigned u , char *str )

{

char strDigits[6] ;         //工作内存

char *pch ;

 

assert( u <= 65535 )       //检查无符号整形的位数

pch = &strDigits[5] ;       //从后往前存入字符

*pch = ‘\0’ ;

do

    *-- pch = ( u % 10 ) + ‘0’ ;

while ( ( u /= 10 ) > 0 ) ;

strcpy ( str , pch ) ;

}

分析:不使用输出内存作为工作内存,因为你不知道str指向的内存有多大,所以最好不要用输出内存str作为工作内存,除非str明确定义了内存 

                                           

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中,有几个常用函数,如最大值函数(max)、最小值函数(min)、绝对值函数(abs)以及求平均值函数(mean)等。下面就以这几个函数为例,介绍它们的C语言版本改写。 1. 最大值函数(max):在C语言中,可以使用循环遍历数组,逐个比较元素的大小,找到最大值。代码示例: ```c #include<stdio.h> int findMax(int arr[], int size) { int max = arr[0]; for (int i = 1; i < size; i++) { if (arr[i] > max) { max = arr[i]; } } return max; } int main() { int arr[] = {3, 5, 1, 6, 7}; int size = sizeof(arr) / sizeof(arr[0]); int max = findMax(arr, size); printf("最大值为:%d\n", max); return 0; } ``` 2. 最小值函数(min):与最大值函数类似,可以使用循环遍历数组,逐个比较元素的大小,找到最小值。代码示例: ```c #include<stdio.h> int findMin(int arr[], int size) { int min = arr[0]; for (int i = 1; i < size; i++) { if (arr[i] < min) { min = arr[i]; } } return min; } int main() { int arr[] = {3, 5, 1, 6, 7}; int size = sizeof(arr) / sizeof(arr[0]); int min = findMin(arr, size); printf("最小值为:%d\n", min); return 0; } ``` 3. 绝对值函数(abs):在C语言中,可以使用条件判断来处理绝对值。当输入的数大于等于0时,返回该数本身,当输入的数小于0时,返回其相反数即可。代码示例: ```c #include<stdio.h> int absValue(int num) { if (num >= 0) { return num; } else { return -num; } } int main() { int num = -5; int abs = absValue(num); printf("绝对值为:%d\n", abs); return 0; } ``` 4. 求平均值函数(mean):在C语言中,可以使用循环遍历数组,累加数组元素的值,然后除以数组长度即可求得平均值。代码示例: ```c #include<stdio.h> float calculateMean(int arr[], int size) { int sum = 0; for (int i = 0; i < size; i++) { sum += arr[i]; } float mean = (float) sum / size; return mean; } int main() { int arr[] = {3, 5, 1, 6, 7}; int size = sizeof(arr) / sizeof(arr[0]); float mean = calculateMean(arr, size); printf("平均值为:%f\n", mean); return 0; } ``` 以上代码示例为MATLAB中常用函数C语言版本改写,通过在C语言中使用类似的逻辑和语法来实现它们的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值