• C语言小笔记


     头文件的书写

    头文件实现函数声明,在使用模板后可以实现一个C文件中即使重复包含某个头文件,在系统中用于只会确认为一个包含

    头文件包含可以理解为将头文件内容替换#include“...”行

    模板(dong.h):

    #ifndef _DONG_H_
    #define _DONG_H_
    
    //其它内容
    
    #endif

     编译工具的使用

    C语言(gcc)、C++语言(g++)

    编译默认输出a.out文件

    gcc *
    gcc *.c

    重命名输出文件

    gcc test.c -o newexe

    命令行传递参数

    #include<stdio.h>
    int main(int vsize,char *vch[]) 
    { 
    int i=1;
    for(i=1;i<vsize;i++)
       printf("%d=>%s
    ",i,vch[i]);
    return 0; 
    }

    输入和输出

    scanf()输入

    返回值1为失败,2为正确

    int a, b;
    printf("请输入两个整数,用空格隔开:");
    // scanf("%d,%d", &a, &b);//逗号分隔
    // scanf("%d-%d", &a, &b);//减号分隔
    int i=scanf("%d%d", &a, &b);
    printf("%d,%d,%d", a, b,i);
    
    printf("请输入两个整数,用逗号分隔:");
    scanf("%d,%d", &a, &b);
    printf("%d,%d", a, b);

    printf()输出

    printf("dongxiaodong %d ", 100);//格式化输出

    printf("东小东 ");//直接输出内容

    相关输出百分号意义:

    %d          正常输出整数,仅占有本身大小位置

    %5d        整数位数不足5(起始为1),前面自动补空,超出则与%d相同

    %-5d       整数位数不足5,后面补空,超出则与%d相同

    %f,%F  浮点型(float)输出,默认6位小数位,超出则四舍五入

    %lf          双精度浮点型(double)

    %15f       浮点数总长最小为15,不足则前面补空

    %-15f      浮点数总长最小为15,不足则后面补空

    %3.2f      前面数组3与上两个解释一样,小数点后的2表示小数位最大为2位,多则四舍五入,少则补零

    %c          单个字符

    %s          字符串

    %p          指针地址(十六进制)

    %x,%X    输出不带前缀的十六进制整数,小写x对应小写a、b、c……

    %%         输出符号:%

    输入输出单个字符

    getchar();接收第一个字符,等待用户按下enter键后开始读取

    getche();接收第一个字符,用户输入后马上读取,输入显示,头文件【#include<conio.h>】

    getch();接收第一个字符,用户输入后马上读取,输入不显示,头文件【#include<conio.h>】

    putchar();输出一个字符

    #include<stdio.h>
    void main() {
        char ch = getchar();//拿到输入的第一个字符
        printf("%c
    ", ch);
        putchar(ch);//输出之前输入的字符
        putchar('
    ');//输出换行符
     }

    getc()和putc()

    原型:

    int putc(int char, FILE *stream)

    int getc(FILE *stream)

    省略步骤:FILE *pfin = stdin;

    #include<stdio.h>
    void main(){
      char str[100];
      fgets(str,100,stdin);//stdin标准输入,键盘
      fputs(str,stdout);//stdout标准输出,屏幕
    }

    输入输出字符串

    Gets()与puts()是不安全的操作,取代方法为fgets()与fputs()

    #include<stdio.h>
    void main(){
    char str[100];
       fgets(str,100,stdin);//stdin标准输入,键盘
       fputs(str,stdout);//stdout标准输出,屏幕
    }

    C语言的注释

    #include <stdio.h>

    #define DevFlg 20
    void main(){
    #if(DevFlg==1)
    printf("----1--------");
    #elif(DevFlg==2)
    printf("----2--------");
    #elif(DevFlg==3)
    printf("----3--------");
    #else
    printf("-------------");
    #endif
    }

    调用命令行

    输出默认直接到屏幕,需要获取内容可以将其重定向到文件中,然后再取文件(> 、>>)

    system("cp -rp dongdir dongdir111");

    ‘1’、1、0x01的不同:

    ‘1’为字符,其对应的十进制为49,对应的十六进制为0x31

     1为整型,对应的十进制为1,对应的十六进制为0x01

    十进制是逢十进一,十六进制是逢十六进一,如下表,可见0~9中,十进制和十六进制数是完全相同的,可直接用“==”。

    int

    0x

    0

    0(0x00)

    1

    1 (0x01)

    2

    2(0x02)

    ......

    ......

    8

    8(0x08)

    9

    9(0x09)

    10

    A(0x0A)

    11

    B(0x0B)

    15

    F(0x0F)

    字符(ASCII)与进制之间的转换

    字符到进制

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    void main() {
        char aa = (int)'b';//将ASCII转换为整数
        char bufx[120];
        itoa(aa, bufx, 16);//进制转换,2 8 10 16
        int lend = strlen(bufx);
        bufx[lend] = 0;//截断数组
        //输出:2----62
        printf("%d----%s
    ", lend,bufx);//输出进制转换后的值
    }

    十六进制到字符串

    #include<stdio.h>
    #include<stdlib.h>
    void main() {
        char chx[] = { 0x82,0x07,0x00,0x01,0x00,0x02,0x6e,0x62,0x00};
        char j = 0;
        const int lenx = sizeof(chx);
        char strxto[lenx];
        for (j = 0; j <lenx; j++)
        {
            printf("%c", chx[j]);
            strxto[j] = (char)chx[j];
        }
        printf("len:%d--data:%s--
    ", lenx,strxto+6);
    }

    条件/循环语句:

    switch…case…break

    条件可以是数字(如十进制、十六进制等),可以是字符(如‘a’等)

    goto

    使用时语句标号和goto必须在同一个函数内,语句标号和goto的前后位置无规定

    for(初值,条件,初值变化){ 循环体;}

    执行循序:初值->条件->循环体->初值变化->条件->循环体…

    #include<stdio.h>
    void main(){
      int i;
      for(i=0;i<3;++i){
         printf("i1:%d
    ",i); //0 1 2
      }  
      for(i=0;i<3;i++){
         printf("i2:%d
    ",i); //0 1 2
      }
    }

     程序的四大区

    代码区(Code):

    指用来存放程序中执行代码的一块内存区域。区域大小在程序运行前就已经确定,并且内存区域通常属于只读,某些架构也允许代码段为可写,在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

    数据区(data):

    全局变量、字符串、静态变量

    指用来存放程序中已初始化的全局变量的一块内存区域。属于静态内存分配。

    堆(heap):

    堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。

    //声明空间
    //返回值void指针
    //参数表示大小
    //如果内存申请失败(内存空间不足),则返回NULL
    void *malloc(unsigned int size);
    
    //释放空间
    void free(void *p);

    栈(stack):

    是用户存放程序临时创建的局部变量的一块内存区域。也就是函数括号{}中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,函数在被调用的时候,其参数也会被压入发起调用的进程栈中,并且调用结束后,函数返回值也会被放入栈中。由于栈的先进后出的特点,栈特别方便用来保存/恢复调用现场。从这个意义上讲,可以把栈看成一个寄存、交换临时数据的内存区。

    例子

    int a = 0;//数据区
    char *p1;//数据区
    int main()
    {
        int b; //栈区
        char s[] = "abc";//栈区
        char *p2;//栈区
        char *p3 = "123456";//p3在栈区,123456/0在文字常量区(数据区)
        static int c = 0;//静态初始化区(数据区)
        p1 = (char *)malloc(10);
        p2 = (char *)malloc(20);//分配得来的10和20字节得区域就在堆区。
    }
  • 相关阅读:
    docker学习
    redis哨兵部署
    HUE中一些重要元数据表的DDL整理
    Autosys中ON_HOLD和ON_ICE的区别
    Spark结构化API的执行过程——Logical Plan & Physical Plan
    关于Spark中Columns的引用方法
    关于Spark Dataset API中的Typed transformations和Untyped transformations
    关于Kafka Consumer 与 Partitions
    使用sed根据变量值注释掉文件中相匹配的记录行
    sqoop export to teradata时出现java.lang.NullPointerException
  • 原文地址:https://www.cnblogs.com/dongxiaodong/p/9883324.html
Copyright © 2020-2023  润新知