在Ubuntu上学习C语言(一)

学习嵌入式的第二步当然是学会C语言


一、输入输出

标准输入一般指的是键盘的设备文件, 从键盘获取数据就成为标准输入

如果以后需要从标准输入中获取数据得到乱码或未知数据,则可以尝试使用getchar进行清空再 获取。

标准 对应符号 作用
标准输入 stdin 对应的是键盘文件
标准输出 stdout 对应的是终端《带缓冲区》(屏幕)
标准出错 stderr 对应的是终端《无缓冲区》(屏幕)
c 复制代码
#include <stdio.h>

int main(int argc, char const *argv[])
{
    printf("hello Ubuntu!");
    //把 hello Ubuntu 输出到 标准输出文件里(需要缓冲)
    return 0;
}
c 复制代码
#include <stdio.h>

int main(int argc, char const *argv[])
{
    printf("hello Ubuntu!");
    //把 hello Ubuntu 输出到 标准输出文件里(需要缓冲)
    printf("hello C\n");
    //把 hello C 输出到 标准输出文件里 遇到\n就会刷新缓冲区
    return 0;
}

标准输出文件中默认使用缓冲 ,也就是当遇到 \n 的时候会进行刷新缓冲区(把数据输出)

当打印语句后面没有换行符时 , 需要等待缓冲区被装满或者被别的语句刷新或则程序正常退出

c 复制代码
#include<stdio.h>
int main(int argc, char const *argv[])
{
    int num = 0;
    char c = '0';
    // & 取地址符号 , 获得 内存 num 的地址
    int ret_val = scanf("%d", &num );
    while(getchar() != '\n'); // 清空 由 scanf 所留在缓冲区的内容
    // 如果不清空有可能会导致下一次使用标准输入缓冲区异常(有上一次的数据没有被读取)

    printf("返回值:%d , 获取的数据为:%d\n" , ret_val , num );

    ret_val = scanf("%c", &c );
    while(getchar() != '\n'); // 清空 由 scanf 所留在缓冲区的内容
    printf("返回值:%d , 获取的数据为:%c\n" , ret_val , c );

    printf("EOF:%d\n" , EOF); //EOF 实际上是一个值为‐1 的宏

    return 0;
}

调试技巧

c 复制代码
    //调试技巧
    printf("%s--%s--%d\n",__FILE__,__FUNCTION__,__LINE__);
    //__FILE__:文件名
    //__FUNCTION__:方法名
    //__LINE__:当前行数

编译技巧

c 复制代码
gcc Hello.c // 使用gcc 编译 Hello.c 并且默认生成一个名为 a.out的可执行文件
gcc Hello.c ‐o NOHELLO // 使用gcc 编译
// Hello.c 并且指定生成名字为NOHELLO 的可执行文件
gcc Hello.c ‐o NOHELLO ‐v // ‐v 输出编译的信息, 包括头文件寻找的路径
gcc Hello.c ‐o NOHELLO ‐I/mnt/d/ ‐v // ‐I 指定头文件寻找的路径(在原本默认的基础上添加)
gcc Hello.c ‐Wall // 输出所有的警告

二、整型

int是表示整数类型的数据

c 复制代码
int a = 123;
 /*
    1、先向系统申请一块内存,4字节,名字为a
    2、把12转化为二进制并存入内存中
    */

取值范围:

shell 复制代码
getconf INT_MAX
getconf INT_MIN

整型的修饰符

修饰符 作用
short 短整型 用于修饰整型的尺寸变为原本的一半,减少内存的开支,缩小取值范围
long 长整型 用于修饰整型的尺寸使其尺寸变大(取决与系统), 增加内存开支, 扩大取值范围
long long 长长整型 用于修饰整型的尺寸使其尺寸变大(取决与系统), 增加内存开支, 扩大取值范围 (在64位系统中 long 与 long long的大小一致)
unsigned 无符号整型 用来修饰整型并去掉符号位,使得整型数据没有负数,可以提正整数的取值范围 (0 - 4294967295)

整数的存储方式

原码:正整数是直接用原码进行存储,直接把正整数转化为二进制进行存储

补码:负数则是使用补码来存储;补码=原码的绝对值 取反+1

取反加1时符号位不变

溢出:当超过取值范围时则会变成相邻的最大值\最小值

整型输出

c 复制代码
#include <stdio.h>
//头文件

int main(int argc, char const *argv[])
{
    
    //int型
    int a = 100;
    /*
    1、先向系统申请一块内存,4字节,名字为a
    2、把100转化为二进制并存入内存中
    */

    //INT的最大值是2147483647
    printf("%d\n",__INT_MAX__);
    //INT的最小数值是-2147483648


    //输出
    printf("十六进制:%#x\n",a);
    printf("十进制:%d\n" , a );
    printf("八进制:%#o\n" , a );
    return 0;
}

sizeof运算符

这里推荐到这个博主:
https://blog.csdn.net/zhouml_msn/article/details/103361539

三、浮点型

浮点是用来表达一个实数的数据类型。

分类有:

  • 单精度浮点型 float , 典型尺寸 4 字节
  • 双精度浮点型 double , 典型尺寸 8 字节
  • 长双精度 long double , 典型尺寸 16 字节
c 复制代码
    char k = 'K';
    /*
    1、申请一片内存并命名为k
    2、把字符'K'的ASCII码值转换为二进制,并存储到该内存中
    3、计算机中存储的所有数据都是以二进制的形式存在的, 因此字符必须映射某一个数字才能
够被存放到计算机中,这个映射的表就成为 ASCII 表,可以使用man手册来查看
    */

man ascii

c 复制代码
char c = '1' ;

printf("字符:%c\n",c); // 以字符的形式来解析内存 c 的内容得到 对应的字符 1
printf("整型ASCII值:%d\n",c); //以十进制整型来解析内存c 的内容 ,得到1多对应
的ASCII值

四、字符串

字符串的表现形式有两种:

  • 数组(可读 ,可写):(存储)
  • 指针
c 复制代码
char s1 [] = "Hello" ; //使用一个数组来存放字符串 "Hello"
c 复制代码
char * s2 = "Even"; // 使用一个指针来指向常量字符串

五、布尔类型

布尔类型用来表示真/假 (非零则真)

注意在使用布尔类型是需要包含他的头文件: <stdbool.h>

c 复制代码
    bool a = true ;

    printf("sizeof(bool):%ld \n ",sizeof(bool) );
    printf("sizeof(a):%ld \n ",sizeof(a) );
    printf("sizeof(true):%ld \n ",sizeof(true) );
    printf("sizeof(false):%ld \n ",sizeof(false) );
    printf("false:%d \n ",false );
    printf("true:%d \n ",true );
相关推荐
AC是你的谎言4 小时前
HTTP和HTTPS
linux·网络·c++·网络协议·学习·http·https
Ypuyu5 小时前
【GoLang】【框架学习】【GORM】4. 使用 BeforeUpdate hook 操作时,出现反射报错
开发语言·学习·golang
ZIM学编程5 小时前
「学长有话说」作为一个大三学长,我想对大一计算机专业学生说这些!
java·c语言·数据结构·c++·python·学习·php
Felicity_Gao6 小时前
uni-app App升级功能实现
前端·学习·uni-app
CS Beginner6 小时前
【搭建】个人博客网站的搭建
java·前端·学习·servlet·log4j·mybatis
Siren_dream6 小时前
在Ubuntu通过命令行安装MySQL(tabby远程)
mysql·ubuntu
子枫秋月7 小时前
单链表实现全解析
c语言·数据结构·c++
reept7 小时前
Pytorch常用函数学习摘录
人工智能·pytorch·学习
消失的旧时光-19437 小时前
c语言 内存管理(malloc, calloc, free)
c语言·开发语言