一些关于C语言的总结

看到一哥们写的笔记,感觉不错就拿过来了。本想加到网摘里边,可捣腾了半天就没有发现加网摘的链接,最后还是写到自己的博客中吧!

总结1:

char *ch ="12345";  <=> char ch[] = "12345"; <=> char ch[] = {"12345"}; (puts /printf(%s))<=>char ch[] = {‘1’,‘2’,‘3’,‘4’,‘5’,'/0'};(必须有单引号)


scanf("%[^'/n']",a); <=> gets(a);(空格也会录入,直到回车)

总结2:
sscanf()函数和sprintf()函数
大家知道fprintf是对文件进行输出,而f对应file,这里的s对应string,也就是sprintf的输出对象是字符串,这个函数就可以把整型转化为字符串,而sscanf则是以字符串为输入对象,可以把字符串转化为如数字
例子:
int n;char s[]="1234";
sscanf(s,"%d",&n);这样n的值就是1234

总结3:
<string.h>字符串处理库
(1)
memset(数组名 ,要初始化的数, 数组长度)     //数组初始化
例子:把a[]数组清0
memset(a,0,sizeof(a));注意这里面参数顺序和fillchar的区别,前面说过mem*系列是把数组当成了字符串来处理,所以处理的对象是每个字节,所以如果是int数组,除了清0和全部清为-1以外(-1的补码是全1), 其它初始化操作慎用.

(2)
memcpy(目标数组, 被拷贝数组, 要拷贝长度)
数组复制,
C语言中不提供直接的等号数组复制,但是通过它能够快速复制数组
例子:把a[]复制到b[]中
memcpy(b,a,sizeof(a));//a相当于点,sizeof(a)相当于长度,两个确定了一条数据线,可以平移到b

(3)
memcmp(数组1,数组2,要比较长度L)
数组比较,:把两数组的前L个字节看成是两个字符串做strcmp一样的比较
该函数在一些数组比较判重的时候比较高效率

(4)
memmove(目标数组,被拷贝数组,要拷贝长度)
数组复制,它和memcpy不同的是两数组可以有重叠部分,也就是可以实现fp中move的作用
例子:把a[]从第a[i]个开始后面的K个数据都后移一位
memmove(a+i+1,a+i,sizeof(a[0])*K);

<stdlib.h>标准函数库
(1)
abs函数,这是一个取绝对值的函数,但是要注意它和PASCAL中abs函数的区别,在C中的abs函数只适用于整型,而实型变量取绝对值则需要<math.h>中的fabs

(2)
快排函数qsort():

void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );


/* qsort example */
#include <stdio.h>
#include <stdlib.h>

int values[] = { 40, 10, 100, 90, 20, 25 };

int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}

int main ()
{
  int n;
  qsort (values, 6, sizeof(int), compare);
  for (n=0; n<6; n++)
     printf ("%d ",values[n]);
  return 0;
}
 
Output:

10 20 25 40 90 100


(3)
随机数产生函数rand():

/* rand example: guess the number */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main ()
{
  int iSecret, iGuess;

  /* initialize random seed: */
  srand ( time(NULL) );

  /* generate secret number: */
  iSecret = rand() % 10 + 1;

  do {
    printf ("Guess the number (1 to 10): ");
    scanf ("%d",&iGuess);
    if (iSecret<iGuess) puts ("The secret number is lower");
    else if (iSecret>iGuess) puts ("The secret number is higher");
  } while (iSecret!=iGuess);

  puts ("Congratulations!");
  return 0;
}

 

Output:

Guess the number (1 to 10): 5
The secret number is higherGuess the number (1 to 10): 8
The secret number is lowerGuess the number (1 to 10): 7
Congratulations!

(4)
<limits.h>
这个库里面没有函数,但是有一些常用的极限,比如INT_MAX(int变量的上限)LONG_MAX,ULONG_MAX(unsigned long的上限)等等,是很有用的


总结4:
int (*(*a)(int (*)[10][20],int))[10];//右左法则

总结5:
const void *p; <=>void const *p;  /*常量指针,与常引用相似,不能通过指针改变指向的数据,中心语为指针,所以可以先定义,后赋值,强调指向的内容为“常量”*/
void * const p;/*指针常量,与指针变量相对,不能改变指针的指向)*/
const void *const p; <=> void const *const p;/*指向常量的常指针*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值