C语言基础知识总结

C语言基础知识总结

一.常见的几种API

1.输入字符串

    puts();
    printff("%s",p);
eg:void myputs(char *p) //*除了变量声明,定义以外,都是运算符
{
     //字符串明显的特点:结尾有'\0'
     while( *p != '\0'){
         putchar(*p++);
         //printf("%c\n",*p++);     
     }
     putchar('\n');
}

2.获取字符串

    gets();    内存是否合法
    scanf("%s",p);
eg:int mygets(char *p)
{
    int cnt = 0;     
     
    if(p == NULL){
       printf("内存非法\n");
       return;    
    }
    while( *p = getchar()){
       if(*p == '\n'){
         return cnt;       
       }else{
          cnt++;
          p++;       
       }    
    }
}

3.计算长度(strlen)

eg:int myStrlen(char *str)
{
    int cnt = 0;
    
    while( *str++ != '\0'){
        cnt++;    
    }
     return cnt;
} 

4.初始化(memset)

eg:void myMemset(char *p, char c, int size)
{
     while(size){
     
        *p++ = c;
        
        size--;
     }
}   

5.拷贝

     strcpy
     strncpy
     原函数:char*strcpy(char*dest,const char*src)
eg:char *myStrcpy(char* dest, const char *src)
{
    if(dest == NULL || src == NULL){
       return NULL;    
    }
    //字符串结尾是‘\0’
    while( *src != '\0'){
        *dest++ = *src++;    
    }
    *dest = '\0';
    
    return dest;
}

char *myStrncpy(char* dest, const char *src, int n)
{
    if(dest == NULL || src == NULL){
       return NULL;    
    }
    //字符串结尾是‘\0’
    while( *src != '\0' && n>0){
        *dest++ = *src++;  
        n--;  
    }
    *dest = '\0';
    
    return dest;
}

6.拼接

    strcat
eg:void myStrcat(char *dest, char *src)
{
     while( *dest != '\0'){
         dest++;     
     }
     
     while( *src != '\0'){
         *dest++ = *src++;     
     }
}

7.比较

  strcmp

8.查找

   strchr

9.字符串分割

    strstr
    strtok

10. 转为小写的函数

     strlwr
     strupr

二.!在C语言中的用法

1.用来做逻辑运算中的非运算

 !用作非运算时,是单目运算符,与右侧的表达式结合。
 eg:!exper的含义(exper == 0)即当exper值为0时,结果为1否则结果为0。

2.和=联用,组成逻辑判断的不等于运算

!=是一个操作符,表示逻辑运算的不等于,其为双目运算符,左右都要有表达式,形式为exper1! = exper2 ,当exper1和exper2值相等时,结果为0,否则结果为1。

3.出现于字符串中,或者以"!"形式出现时,即字符常量!,其ascii码值为0x21,10进制为33.

4.双目运算符

       运算所需要变量为两个的运算符,要求对象的个数是2.    

5.c语言!的含义

     (1)!=就是不等于
     (2)表非,加层否定

三.C语言中%c%d等代表什么含义

1.%a(%A) 浮点数,十六进制数字
2.%c 字符
3.%f 浮点数(包括float和double)
4.%e(%E) 浮点数指数输出[e-(E)计数法]
5.%g 浮点数不显示无意义的零“0”
6.%i 有符号十进制整数(与%d相同)
7.%p 指针
8.%s 字符串


四.数组及指针的总结

1.整型变量:存放的是整数
eg:int a; a = 10
2.字符变量:存放的字符
eg:char c; c = ‘A’
3.指针变量:存放的是指针
eg: int *p; p = &a
int p; p = &c
4.只有定义一个指针变量的时候,才是指针的标识符
5.其他情况,都是一个运算符,此时代表的是一个运算符,跟±x/运算类似,该运算符的功能是取出内存地址中数据的值(取内容)。

6.指针 = 地址
(1)存放指针的变量
(2)存放地址的变量

7.变量的访问有两种方式
(1)变量名
eg:花店:一路以花店名问路找到花店
(2)地址
eg:地址:店的地址;导航过去

8.指针的使用
(1)指针分类型
(2)指针++根据类型不同,偏移值不同
(3)指针数组
数组首地址<1>数组名 int array[10], int p, p = array
<2>第一个元素的地址 array[10], int *p, p = &array[0]
指针注意偏移的位置,不要超出了数组
9.数组指针
(1)一个指针变量
(2)真正地指向某个类型整型数组的指针
<1>以前我们指针是指向数组的头
<2>此指针明确规定了要指向数组的类型及大小
eg:int (*p)[4]

10.指针数组
(1)指针的数组
(2)好多指针放在一起
(3)是一个数组,数组的每一个元素是指针<好多变量的地址的集合>
eg:int *p[4]

11.数组元素个数的计算方法

arrayprintf(array,sizeof(array)/sizeof(array[0]))

12.如何通过函数指针调用函数
(1)直接通过占用空间四个字节

eg:p2();

(2)取内容<*指针名字>

eg:(*p2)();

13.(1)一个整型数占用空间4个字节

eg:int a[3];

(2)一个char型占用空间1个字节

eg:char b[3];

(3)函数调用中,传参就是一个赋值的过程,实际参数的值,给形式参数。

14.无类型指针
常用在编程编写中对定义函数的参数类型、返回值、函数中指针类型进行声明。

15.void
(1)对函数返回的限定
(2) 对参数的限定


五.malloc使用的注意事项

1.(1)申请了空间
* (2)一旦用malloc,一定要注意内存泄漏问题
* (3)malloc可能会失败,要对返回值做判断

 eg:pstr = (char*)malloc(128);

(4)程序不会主动释放,linux的话,程序结束后,系统会回收该空间

int *a = (int*)malloc(3*sizeof(int))

六.野指针

1.野指针

char *p;  //p的值是随机的

2.解决方法

char *p = NULL;
char *p = (char*)malloc(128);

3.产生的原因

    (1)指针定义时被初始化。
    (2)指针被释放时没有置空。
    (3)指针操作超越变量作用域。

七.函数的总结

1.什么是函数

  函数是一个功能模块,它把实现某个功能的代码快包含起来,并起个函数名,供别人调用,如printf函数,如system函数,是程序运行当中包装起来的一个步骤。

2.为什么要调用函数

 (1)代码好看
 (2)容易定位问题
 (3)可复用性强
 (4)分工

3.如何定义一个函数

  返回值  形式参数  函数名 函数体  代码块

4.函数可以多级调用

5.形式参数局部变量

  (1)生存期
  (2)形式参数灵活
  (3) 此时内存有两个相同,形式参数 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值