zoukankan      html  css  js  c++  java
  • C语言学习笔记(3)

    一.动态内存分配

    C99以后可以用变量做数组定义的大小。

    1. malloc作动态内存分配:

    • 头文件:#include<stdlib.h>
    • 返回结果为void*,需要类型转换为自己需要的类型;
    • 向malloc申请的空间大小是以字节为单位;
    • 如果申请失败则返回0,或者叫NULL;
    • int *a = malloc(n * sizeof(int));

    2.free ( ); //有malloc就有free

    • 把申请得来的空间还给“系统”
    • 只能还申请来的空间的首地址。
    • 常见问题:
      • 申请了没free 导致长时间运行内存逐渐下降;
        • 忘了
        • 找不到时机
      • free过了再free;
      • 地址变过了,直接去free;

    二.单字符输入输出

    1. putchar

    • int putchar(int c);
    • 向标准输出写一个字符;
    • 返回写几个字符,EOF(-1)表示写失败。

    2.getchar

    • int getchar (void);
    • 从标准输入读入一个字符;
    • 返回类型 int 是为了返回EOF(-1)
    • 结束输入
      • Unix ---> Ctrl + D
      • windows --->Ctrl + Z

    三.字符串数组

    1. char**a:

    a是一个指针,指向另一个指针,那个指针指向一个字符串;

    2.程序参数

    int main(int argc, char const *argv[ ])
    argc[0]命令本身

    四.字符串函数

    string.h

    1. strlen:

    • size_t strlen(const char *s);
    • 返回s的字符串长度(不包含结尾的);

    2. strcmp:

    • int strcmp(const char *s1, const char *s2);
    • 比较两个字符串;
      • 返回值:
        • 0:s1 == s2;
        • 正数: s1 >s2;
        • 复数: s1 <s2;

    3.strcpy:

    • char* strcpy(char *restrict dst, const char *restict src);
    • 把src的字符串拷贝到dst,
    • restrict 表示src与dst不重叠(C99)
    • 返回dst为了能链起代码
    char *dst = (char*)malloc(strlen(src)+1);
    strcpy(dst,src);
    

    4. strchr:

    • 寻找字符
    • char *strchr(const char *s, int c); //从左往右找字符
    • char* strrhr(const char *s, int c);//从右往左找字符
    • 返回指针,返回NULL表示没有找到

    5.strstr:

    • 寻找字符串
    • char *strstr(const char *s1, const char s2);
    • char *strcasestr(const char *s1, const char s2);//忽略字符大小写

    6.strcat

    • 把s2拷贝到s1后面,接成一个长的字符串;
    • char *strcat( char *restrict s1, char *restrict s2);
    • 返回s1;
    • s1 必须具备足够的空间;

    五. 我的手写笔记



    六. MOOC代码



    七.产生的问题

    1.malloc函数

    • 解决:
      • 动态储存分配函数;
      • 函数原型:void*malloc(unsigned size)
      • 功能:在内存的动态储存区中分配一连续空间,其长度为size;

    2.字符串数组

    • 解决:把字符串数组看成二维字符数组

    3.为什么可以分配如此大的空间

    4.scanf()与gets();printf()与puts() 的区别:

    • 解决:
      • scanf()只能输入不带空格的字符串,而gets()没有这个限制;
      • printf() 和 puts()的区别在于后者输出字符串会自动换行;
  • 相关阅读:
    测试
    mysql数据库 select语句全集
    Markdown文本的书写格式详解--有道云笔记
    mysql数据忘记库密码
    最新版mysql基本命令操作
    Python从入门到放弃
    第二阶段冲刺
    周总结15
    找水王
    用户体验评价
  • 原文地址:https://www.cnblogs.com/ABClazyboy/p/12498067.html
Copyright © 2011-2022 走看看