C | 学习笔记

C语言的C89、C99和C11标准(上) 一、C99针对C89的改变 1.增加了restrict指针 通过restrict修饰指针,可以确保两个指针不能指向同样的内存空间。 如memcpy函数在C99标准下的定义为 void *memcpy(void *restrict s1, const void *restrict s2,size_t size); 2.增加inline关键字 和C++一样,通过inline函数可以创建内联函数,提高代码的编译效率和执行效率。 3.新的数据类型 C99标准支持一些新的数据类型 布尔类型:bool 复数类型:flo 阅读详情

C | 学习笔记

C99标准

1. Hello World

#include <stdio.h> // 包含另一个文件

int main() // 入口函数
{
    printf("Hello, World!\n"); // Output: Hello, World!
    return 0;
}

2. 注释

int main()
{
    // 注释示例1
    /*注释示例2*/
    return 0;
}

3. 变量与常量

3.1. C基本类型

数字

  • char
  • int
  • short
  • long
  • long long

浮点数

  • float
  • double
  • long double

3.2. 变量声明

变量名要求

必须是小写字母、大写字母、数字和下划线(_),第一个字母必须是字母或下划线。

变量声明

int main()
{
    int a = 1; // 示例1
    int b = 2, c = 3; // 示例2
    int d, e = 4; // 示例3
}

静态变量

#include <stdio.h>

void tryStatic(void);

int main()
{
    int count;
    for (count = 1; count <= 3; count++)
    {
        tryStatic();
    }
    return 0;
}

void tryStatic()
{
    int fade = 1;
    static int stay = 1; // 只在编译时初始化一次
    printf("fade = %d and stay = %d\n", fade++, stay++);
}

Output

fade = 1 and stay = 1
fade = 1 and stay = 2
fade = 1 and stay = 3

3.3. 常量

3.3.1. define常量
#include <stdio.h>

#define MAX_AGE 200

int main()
{
    printf("%d\n", MAX_AGE); // Output: 200
}
3.3.2. const
#include <stdio.h>

int main()
{
    const int MAX_AGE = 200;
    printf("%d\n", MAX_AGE); // Output: 200
    return 0;
}

3.4. 枚举类型

后续更新…

4. 输入与输出

4.1. 输出

#include <stdio.h>

int main()
{
    int a = 16;
    printf("八进制: %o 十进制: %d 十六进制: %x", a, a, a); // Output: 八进制: 20 十进制: 16 十六进制: 10
    
    char c = 'a';
    printf("%c", c); // Output: a
}

4.2. 输入

#include <stdio.h>

int main()
{
    char c;
    printf("Please enter a character.\n");
    scanf("%c", &c);
    printf("Input content: %c", c);

    return 0;
}

Output

Please enter a character.
1
Input content: 1

5. 循环

5.1. for

#include <stdio.h>

int main() {
    for (int i = 1; i < 5; i++) {
        printf("i=%d\n", i);
    }
}

Output

i=1
i=2
i=3
i=4

5.2. do while

无论条件是否满足都会执行一次。

#include <stdio.h>

int main()
{
    int i = 10;
    do
    {
        printf("%d", i);
    } while (i < 5);
}

Output

10

6. 分支跳转

注意:可以使用break和continue这里不在演示

6.1. if

#include <stdio.h>

int main()
{
    int score = 10;
    if (score < 60)
    {
        printf("不及格");
    } else if (score < 70)
    {
        printf("及格");
    } else if (score < 90)
    {
        printf("良");
    } else
    {
        printf("优");
    }
}

Output

不及格

6.2. 三元运算符

#include <stdio.h>

int main()
{
    int num1 = 10;
    int num2 = 11;
    int max = num1 > num2 ? num1 : num2;
    printf("%d\n", max); // Output: 11
}

6.3. switch

#include <stdio.h>

int main()
{
    int floor;

    printf("Input floor:");
    scanf("%d", &floor);
    switch (floor)
    {
        case 1:
            printf("去一楼");
            break;
        case 2:
            printf("去二楼");
            break;
        case 3:
            printf("去三楼");
            break;
        default:
            printf("未知楼层");
    }
}

Output

Input floor:1
去一楼

6.4. go to

#include <stdio.h>

int main()
{
    int num = 10;
    if (num >= 10)
    {
        goto a;
    }

    // 跳过此处
    num++;

    a:
    printf("%d\n", num);
}

Output

10

7. 函数

7.1. 值传递

#include <stdio.h>

// 函数声明
int sum(int a, int b);

int main()
{
    int r = sum(1, 2);
    printf("%d", r); // Output: 3
}

// 函数定义
int sum(int a, int b)
{
    return a + b; // 函数返回值
}

7.2. 地址传递

#include <stdio.h>

void swap(int *a, int *b);

int main()
{
    int a = 1;
    int b = 2;
    swap(&a, &b);
    printf("a=%d b=%d\n", a, b); // Output: a=2 b=1
}

void swap(int *a, int *b)
{
    int t = *a;
    *a = *b;
    *b = t;
}

7.3. 保护参数

#include <stdio.h>

int sum(const int arr[], int n)
{
    int i;
    int total = 0;
    
    // arr[0] = 1; // Output: error: read-only variable is not assignable
    for (i = 0; i < n; i++)
    {
        total += arr[i];
    }

    return total;
}

int main()
{
    int arr[3] = {1, 2, 3};
    int result = sum(arr, 3);
    printf("%d\n", result); // Output: 7
}

7.4. 可变参数

#include <stdio.h>
#include <stdarg.h>

int sum(int count, ...)
{
    int result = 0;
    va_list vaList;
    va_start(vaList, count); // 允许访问的参数数量

    int i;
    for (i = 0; i < count; i++)
    {
        result += va_arg(vaList, int); // 访问下一个参数
    }
    va_end(vaList); // 回收vaList空间
    return result;
}


int main()
{
    printf("%d\n", sum(2, 3, 4)); // Output: 7
}

8. 数组

注意

  • 数组地址传递

8.1. 数组声明

// 声明
// 示例1
int arr[5];
// 示例2
int arr2[] = {1, 2, 3};

8.2. 遍历

#include <stdio.h>

int main()
{
    int arr2[] = {1, 2, 3};

    // 遍历
    int len = sizeof(arr2) / sizeof(arr2[0]);
    int i;
    for (i = 0; i < len; i++)
    {
        printf("%d\n", arr2[i]);
    }
}

9. 指针

9.1. 地址引用示例

#include <stdio.h>

int main()
{
    int i = 1;
    int *p1 = &i;
    *p1 = 2;
    printf("%d", i); // Output: 2
}

9.2. 指针运算

这里只是演示指针加运算,还可以减运算。

#include <stdio.h>

int main()
{
    int arr[] = {1, 2, 3};
    int *p1 = arr;
    int *p2 = &arr[1];
    int *p3 = &arr[2];

    // 计算2个指针中间间隔
    printf("%ld\n", p3 - p1); // Output: 2

    // 指针加
    printf("%d\n", *(p1 + 1)); // Output: 2

    // 指针减
    printf("%d\n", *(p2 - 1)); // Output: 1

    // 比较指针
    // 注意:此处0是指不相同意思
    printf("%d", p1 == p2); // Output: 0
}

9.3. 指针运算和二组数组

#include <stdio.h>

int main()
{
    int arr[3][3] = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
    };
    printf("%lu\n", sizeof(arr[0][0])); // Output: 4
    printf("arr[0]=%p arr[0][0]=%p\n", arr[0], &arr[0][0]); // Output: arr[0]=0x7ff7bdb05900 arr[0][0]=0x7ff7bdb05900
    printf("arr=%p arr+1=%p\n", arr, arr + 1); // Output: arr=0x7ff7bdb05900 arr+1=0x7ff7bdb0590c
}

10. 内存管理

#include <stdlib.h>

int main()
{
    // 示例1
    // 申请内存
    double *temp = (double *) malloc(10 * sizeof(double));
    // 回收内存
    free(temp);

    // 示例2
    // 申请内存
    double *temp2 = (double *) calloc(10, sizeof(double));
    // 回收内存
    free(temp2);

    return 0;
}

11. 限定词

#include <stdlib.h>

int main()
{
    // const
    const int i = 1;
    // i = 2; // 禁止修改

    // volatile
    // 易变的位置,不使用缓存
    volatile int loc1;

    // restrict
    // 告诉编译器,对象已经被指针所引用,不能通过除该指针外所有其他直接或间接的方式修改该对象的内容。
    int *restrict temp = (int *) malloc(10 * sizeof(int));
    free(temp);


    return 0;
}

12. 结构体

#include <stdio.h>
#include <string.h>

struct book
{
    char title[40];
    char author[40];
    float price;
};

int main()
{
    // 示例1
    struct book b1 = {
            .title = "Example",
            .author = "yimt",
            .price = 10.5f
    };
    printf("%s %s %f", b1.title, b1.author, b1.price); // Output: Example yimt 10.500000

    // 示例2
    struct book b2;
    strcpy(b2.title, "Example");
    strcpy(b2.author, "yimt");
    b2.price = 10.5f;
    printf("%s %s %f", b1.title, b1.author, b1.price);// Output: Example yimt 10.500000
    return 0;
}

13. 预处理

13.1. define

#include <stdio.h>

// 常量
#define MAX 10
// 宏
#define SQUARE(x) x*x
#define PSQR(name) printf("Hello %s\n", name)
// ##运算符
#define XNAME(n) x ##n
#define PRINT_XN(n) printf("%d\n", x ##n)
// 可变宏
#define PR(...) printf(__VA_ARGS__)

int main()
{
    // 宏
    printf("%d\n", SQUARE(2)); // Output: 4
    PSQR("yimt"); // Output: Hello yimt

    // ##运算符
    int XNAME(1) = 10;
    int XNAME(2) = 11;
    printf("%d %d\n", x1, x2); // Output: 10 11
    PRINT_XN(1); // Output: 10
    PRINT_XN(2); // Output: 11

    // 可变宏
    PR("yimt\n"); // Output: yimt
    PR("hello %s", "yimt\n"); // Output: hello world
    return 0;
}

13.2. include

#include <stdio.h> // 优先搜索系统目录
#include "stdlib.h" // 优先搜索当前工作目录

14. 注意

14.1. 浮点数精度变量

#include <stdio.h>

int main()
{
    float f = 0.12345678;
    printf("%f", f); // Output: 0.123457

    return 0;
}

15. 参考

  • 《C Primer Plus》
【由浅入深C系列一】C标准库(C99 )接口的头文件集和功能定义参考 C99标准库头文件参考 阅读详情

相关推荐

超全C1认证学习笔记,内容详细,赶快收藏

在我们考过C认证和正在考C认证的同学们当中,都有十分认真的同学。他们每堂课都认证的记下笔记,归纳好,方便自己后续的复习。 今天我们也收到我们C认证考生的投稿,他一共投稿了三篇文章,内容包括计算机通识、WEB基础、JavaScript基础三篇文章,文章干货满满,赶快收藏哦~ 计算机通识 C1认证学习笔记(第一章)https://blog.youkuaiyun.com/Aluxian_/article/details/123476618?spm=1001.2014.3001.5501 WEB基础 C1认证

优快云能力认证官方博客 2190

C89标准、C99标准、C11标准的区别

用于指出__func__所存放的函数名,类似于字符串赋值。

点滴路程 4万+

《C语言从入门到精通》学习笔记001-C语言概述

第一章 C语言概述 1.1 程序语言的发展 1.机器语言:由“0”和“1”组成的二进制数组成的指令序列,是第一代计算机语言 2.汇编语言:用一些简洁的字母、符号串来代替一个特定指令的二进制串 3.高级语言:C/C++等 1.2 C语言发展史 1972年美国人Dennis Ritchie设计 1983年美国国家标准学会指定ANSI C 1.3 C语言的特点 1.程序可读性强,编译效率高 2.34种运...

haoqibbwa_r的博客 829

关于C语言

c语言补充

knighthood2001 3735

【C语言】标准内容介绍(C99)

1967 年,剑桥大学的马丁·理查兹(Martin Richards)对 CPL(CPL 是一种非常接近硬件的语 言。非常复杂,实现困难)语言进行了简化,设计出了 BCPL(Basic Combined Programming Language,基本组合编程语言)语言。1970 年,肯·汤普森(Ken Thompson)以 BCPL 语言为基础,设计出了 B 语言(BCPL 首字母)。随即用 B 语言写出了 UNIX 操作系统。...

m0_62599305的博客 6040

C语言基础学习笔记

引:寒假在家无事,就重新复习了之前令我头疼的C语言。虽然只是看了一些最基础不过的知识,但在这个过程中也确实收获了很多。很多朋友不喜欢C,可能是因为它的指针。众所周知,C是一门面向过程的编程语言,但是当大家去学习其他的面向对象编程语言之后,就好比我最喜欢的Java语言,就会逐渐意识到去了解C得重要性,有些底层的东西,C解释的很透彻,尤以指针为代表。 好了,就说到这里吧!毕竟我也是菜鸟,不便于过多吐槽...

席木木的博客 404

《C程序设计(第四版)》学习笔记

参考教材:谭浩强的《C程序设计(第四版)》 序——对好书的定义:(20130106) 1、定位准确。要明确读者对象,要有的放矢,不要不问对象,提笔就写。 2、内容先进。要能反映计算机科学技术的新成果、新趋势。 3、取舍合理。要做到“该有的有,不该有的没有”,不要包罗万象、贪多求全,不应把教材写成手册。 4、体系的当。要针对非计算机专业学生的特点,精心设计教材体系,不仅

4021

C语言规范标准-C99(中文版)

C99前六章中文完整版,后面的是库和附录没有翻译,可对照英文版阅读。

《C和指针》学习笔记

综述:以后会在这篇博文中记录《C和指针》这本书的学习进度,学习笔记,学习心得等 转载于:https://www.cnblogs.com/SunnyD/p/7694715.html

dingrou6818的博客 102

微信聊天记录解密,必须是root的手机

手机上安装x-plore软件,将/data/data目录的相关EnMicroMsg.db auth_info_key_prefs.xml拷贝到/storge/emulated/0目录后才可以拷贝到电脑。路径:/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml。但是是加密过的 需要解密 解密密码生成规则是手机IMEI+微信UIN md5(32位小写)后的前7位。安卓手机要root测试版本微信要7或者8版本都可以。选择message表。

venus60的专栏 1004

用友U8库龄分析避坑指南:物料出入库日期计算的5个常见错误

本文深入剖析了在用友U8系统中进行库龄分析时,物料出入库日期计算的五个常见陷阱。从数据源选择、业务类型过滤、计价方式逻辑、期初数据处理到查询性能优化,逐一解析错误根源并提供避坑指南,帮助企业获得准确的库龄数据,有效管理库存与资金风险。

weixin_29209801的博客 454

我的C/C++ 学习笔记 之 约定

C/C++学习笔记《约定》制定 Version 20090109文章标题约定标题样式:[类型].[名称]                        [类型]目前包括:[FAQ] , [C学习笔记] ,[心得体会]                         如:[FAQ].基础知识文章内容约定FAQ About C/C++(持续更新)参考

三十而立 四十不惑 642

工程师职级胜任力框架

一、前言 尽管这些年国内的IT行业发展迅速,但是仍然欠缺一套比较综合性的面向工程师的职级胜任力框架,造成国内很多工程师大都一心只想成为技术大牛,而忽视了自己全方位的工程师职业素养和能力的培养。 最近我有幸读到了Circle CI公司分享的工程胜任力矩阵,发现这份文档就是一份比较贴合互联网研发型企业的工程师职级胜任力框架,于是我在它的基础上,重新整理出了一份更适合国内工程师阅读的《工程师职级胜任力框架》,并把它分享在波波的github站点上,希望这份文档对工程师的职业开发和成长有帮助。注,Circle CI.

架构师波波的专栏 6327

C课堂学习笔记

输入日期输出星期第二种方法。

huigezi24的博客 167

一文看懂分布式存储架构

目录一、集中存储结构二、分布式存储1 、分布式存储的兴起2 、分布式存储的重要性3 、分布式存储的种类和比较三、分布式理论浅析1 、一致性和可用性2 、数据分布3 、复制4 、分布式协议5、跨机房部署四、分布式文件系统1、 Google 文件系统( GFS )2、 Taobao 文件系统( TFS )3、 Fackbook Haystack 文件系统4、 CDN 内容分发网络五、分布式键值系统1、 Amazon Dynamo2、 Taobao Tiar3、 ETCD4 、产品选型比较( Etcd , Zoo

weixin_70730532的博客 2万+

基于simulink的多能源系统协同控制的复杂场景实例:氢燃料电池+锂电池混合动力电动汽车能量管理仿真

本文介绍了基于Simulink的氢燃料电池与锂电池混合动力电动汽车能量管理系统的建模与仿真方法。系统包含驾驶循环输入、氢燃料电池、锂电池、能量管理和电机驱动等模块,通过Simulink实现各模块的协同控制。文章详细说明了从模型创建到性能评估的完整流程,包括驾驶循环输入设置、燃料电池和锂电池子系统建模、能量管理策略设计等关键步骤。该仿真模型可验证不同工况下的系统响应和能量利用效率,为优化混合动力汽车的能量管理策略提供有效工具。通过引入更复杂的物理细节和环境因素,可进一步提升模型的实用性和准确性。

xiaoheshang_123的博客 368

高级语言程序设计学习笔记/C语言

高级语言程序设计学习笔记。高级语言程序设计学习笔记。高级语言程序设计学习笔记。高级语言程序设计学习笔记。高级语言程序设计学习笔记。高级语言程序设计学习笔记。高级语言程序设计学习笔记。

2401_86676745的博客 868

SAP使用XCO框架创建RAP所有对象

通过XCO框架自动生成SAP ABAP开发对象。

DeveloperMrMeng的博客 547

【C语言与Python学习笔记目录】

【C语言与Python学习笔记目录】 为了极大程度地方便大家查阅资料,我特地将C语言和Python的学习笔记整理成目录的形式,大家直接就可以链接进去,就不用了找了,只需收藏本页就可以。 小白之路艰辛,希望在帮助到大家的同时能收获到大家小小的赞~ C语言 C语言-基础入门-学习笔记(1):概述 C语言-基础入门-学习笔记(2):常量与变量&基本数据类型 C语言-基础入门-学习笔记(3):表达...

qq_42826337的博客 4386

Python爬虫实战 | 拼多多商品评论采集与深度分析

本文从 API 调用、网页渲染到情感分析与关键词提取,全流程剖析了“拼多多商品评论采集与分析”项目。Scrapy + API 可快速抓取评论;Playwright 可突破 API 限制,抓取完整页面内容;数据清洗 + 分析揭示用户真实反馈;可持续部署、扩展至更多商品 & 时间段;

2201_76125261的博客 1696

11、频率响应与伯德图详解

本文详细介绍了电子电路分析中的频率响应与伯德图,涵盖分贝的定义与计算、带宽与3dB点、放大器反馈机制、倍频程与十倍频程概念,并系统讲解了基于实数和复数零极点的伯德图构建方法。通过具体示例分析了传递函数的渐近近似、幅度与相位响应,并结合MATLAB工具展示了伯德图的绘制过程。文章旨在帮助读者深入理解电路在不同频率下的行为特性,为电路设计与优化提供理论支持。

white的博客 172

AutoLeaders控制组——C语言指针学习笔记

AutoLeaders控制组——C语言指针学习笔记-优快云博客

W_ccc的博客 130

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【C语言】谭浩强第四版-学习笔记

C程序设计(第四版)谭浩强著-学习笔记

m0_46651960的博客 414

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

c语言入门这一篇就够了-学习笔记(一万字)

转载:c语言入门这一篇就够了-学习笔记(一万字)_天涯明月笙的博客-优快云博客_c语言

qq_41760419的博客 254

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C语言--学习笔记第一天

———(子目录) bin(二进制) ,ecr(配置文件) ,mnt(挂载文件),home(家目录(符号“~”)),lib库文件,root(权限文件),boot(启动文件)-rw-rw-r-- 硬链接数 用户名 用户组名 文件大小 时间戳(最后一次修改文件的时间) 文件名。cp -r 目录文件1 目录文件2:把目录文件1复制到目录文件2下,生成一个相同的目录。cp 文件1 文件2:把文件1复制给文件2,如果没有文件2创建文件2。我要去哪(进入一个目录或者路径下,只能是目录文件结尾)---cd。

m0_74253773的博客 869

C 语言督学营 学习笔记 目录

本系列为本人在王道C语言督学营学习记录,如有侵权联系删,支持王道!龙哥! 文章目录一、初期 C 语言基础入门1、Day01 — Day042、Day5 — Day63、Day7 — Day84、Day9 — Day105、Day11 — Day12二、中期 数据结构源码实战1、Day1 — Day22、 Day3 — Day43、Day5 — Day64、Day7— Day85、Day9— Day106、Day11— Day12 一、初期 C 语言基础入门 1、Day01 — Day04 环境调试搭建,.

QuantumYou的博客 3072
上一篇: Docker | 构建镜像
下一篇: 我的创作纪念日
yimtcode
博客等级 码龄6年 205粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yimtcode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值