关于C语言

news2024/9/23 12:30:04

C99是啥

很多书籍开篇会突然提到C99标准,因此这里搜了一下。

C99是C语言的官方标准第二版。1999年12月1日,国际标准化组织和国际电工委员会旗下的C语言标准委员会正式发布了这个标准文件 ;

C99是在C89和C90的基础上发展起来的,增加了基本数据类型、关键字和一些系统函数等,C99有一部分是对于增加了宽字符集,还加入了一些库函数,是继C89标准之后的第二个C语言官方标准。

其中百度百科种讲的还是比较详细的,如C99的新特性,大家可以自己看看。

C语言数据类型

C语言数据类型如下:(图中有*的是C99标准所增加的)

C语言运算符

C语言提供以下运算符:

可以了解一下以下内容

C语言逻辑运算符

数据结构中常用的基础知识

以下是数据结构中常用的基础知识:

typedef

typedef 为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)

比如我们常用的

typedef int Status;

Status是函数的类型,其值是函数结果状态代码,如OK等

结构体

声明一个结构体

struct Student{
        int num;
        char name[20];
        int age;
};

在声明类型的同时定义变量

struct Student{
        int num;
        char name[20];
        int age;
}student1;

结构体指针

结构体指针就是指向结构体变量的指针。一个结构体变量的起始地址就是这个结构体变量的指针。如果把一个结构体变量的起始地址存放在一个指针变量中,那么这个指针变量的基类类型必须与结构体变量的类型相同。如:

struct Student * pt;

pt可以指向struct Student类型的变量或数组元素

例如

//声明结构体类型 struct Student
struct Student{
    long num;
    char name[20];
    char sex;
    float score;
};
struct Student stu_1; //定义struct Student类型的变量stu_1
struct Student *p; //定义指向 struct Student类型数据的指针变量p
p = &stu_1; //p指向 stu_1

接下来对结构体变量的成员进行赋值

赋值完成后进行打印输出,

printf("No.:%ld\n",stu_1.num);
printf("No.:%ld\n",(*p).num);

这两个printf函数输出结果一样

分析:

在主函数中声明了 struct Student类型,然后定义一个 struct Student类型的变量stu_1。又定义一个指针变量p,它指向一个 struct Student类型的对象。将结构体变量stu_1的起始地址赋给指针变量p,也就是使p指向stu_1,然后对stu_1的成员赋值。

第1个print f函数是通过结构体变量名stu_1访问它的成员,输出stu_1的各个成员的值。用 stu_1.num 表示stu_1中的成员num。第2个printf函数是通过指向结构体变量的指针变量访问它的成员,输出stu_1各成员的值,使用的是(*p).num这样的形式。(*p)表示p指向的结构体变量,(*p).num是p所指向的结构体变量中的成员num。

注意*p两侧的括号不可省,因为成员运算符“.”优先于“*”运算符,*p.num就等价于*(p.num)了。

说明:为了使用方便和直观,C语言允许把(*p).num 用p->num代替,“->”代表一个箭头,
p->num表示p所指向的结构体变量中的num成员。同样,(*p).name等价于p->name。
“->”称为指向运算符
如果p指向一个结构体变量stu,以下3种用法等价:
①stu.成员名(如 stu.num);
②(*p).成员名(如(*p).num);
③p->成员名(如 p->num)

上面内容在数据结构中会经常使用到。

(++p)->num与(p++)->num

(++p)->num
(p++)->num

(++p)->num是先使p自加1,然后得到p指向的元素中的num成员值

(p++)->num是先求得p->num的值,然后再使p自加1

以上两者是有区别的。

指针处理链表

struct Student{
    int num;
    float score;
    struct Student * next;//next是指针变量,指向结构体变量
};

成员num和score用来存放结点中的有用数据(用户需要用到的数据),next是指针类型的成员,它指向 struct Student类型数据(就是 next所在的结构体类型)。

#include<stdio.h> 
//声明结构体类型 struct Student
struct Student {
    int num;
    float score;
    struct Student* next;
};
int main() {
    struct Student a, b, c, * head, * p; //定义3个结构体变量 a.b.c 作为链表的结点 
    a.num = 10101; a.score = 89.5; //对结点 a 的 num 和 score 成员赋值
    b.num = 10103; b.score = 90;  //对结点 b 的 num 和 score 成员赋值
    c.num = 10107; c.score = 85; //对结点 c 的 num 和 score 成员赋值
    head = &a;  //将结点 a 的起始地址赋给头指针 head
    a.next = &b; //将结点 b 的起始地址赋给 a 结点的 next 成员
    b.next = &c;  //将结点 c 的起始地址赋给 a 结点的 next 成员
    c.next = NULL; //c 结点的 next 成员不存放其他结点地址
    p = head; //使 p 指向 a 结点
    do {
        printf("%ld %5.1f\n", p->num, p->score); //输出 p 指向的结点的数据
        p = p->next; //使p指向下一结点
    } while (p != NULL); //输出完 c 结点后 p 的值为 NULL ,循环终止
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/505594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

独立站平台选哪个好?5个独立站平台优缺点分析

选择适合自己的独立站平台需要综合考虑多个方面的因素&#xff0c;包括平台的优缺点、自己的需求和预算等因素。下面是几个常见的独立站平台的优缺点分析供您参考&#xff1a; 一、Shopify&#xff1a; 优点&#xff1a;简单易用&#xff0c;拥有丰富的主题和应用程序&#xf…

JavaScript实现求1-100之间不能被3整除的数之和,求100以内偶数的和的两个程序代码

以下为实现求1-100之间不能被3整除数之和求100以内偶数的和的两个程序代码和运行截图 目录 前言 一、实现输入两个数比较两个数的大小 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 二、求100以内偶数的和 2.1 运行流程及思想 2.2 代码段 2.3…

泰坦尼克号幸存者预测(案例)----决策树版

1、导入需要的库 import pandas as pd from sklearn.tree import DecisionTreeClassifier import matplotlib.pyplot as plt from sklearn.model_selection import GridSearchCV2、导入数据 在此下载泰坦尼克号训练数据 data pd.read_csv(r"F:\data\train1.csv") …

内网安全:Cobalt Strike 安装.

内网安全&#xff1a;Cobalt Strike 安装. Cobalt Strike是一款渗透测试神器&#xff08;又称为CS&#xff09;。拥有多种协议主机上线方式&#xff0c;集成了端口转发&#xff0c;socket代理&#xff0c;office攻击&#xff0c;文件捆绑&#xff0c;钓鱼&#xff0c;提权&…

哈希算法原理与应用:确保数据完整性和安全性的关键技术

哈希算法是一种将任意长度的消息映射为固定长度摘要或哈希值的算法。哈希算法主要被用于验证数据的完整性和安全性。哈希算法的应用广泛&#xff0c;例如在密码学中用于验证数据完整性和数字签名&#xff0c;也用于检索数据和进行散列分布式存储。下面将详细介绍哈希算法的原理…

《Linux 内核设计与实现》12. 内存管理

文章目录 页区获得页获得填充为 0 的页释放页 kmalloc()gfp_mask 标志kfree()vmalloc() slab 层slab 层的设计slab 分配器的接口 在栈上的静态分配单页内核栈 高端内存的映射永久映射临时映射 每个 CPU 的分配新的每个 CPU 接口 页 struct page 结构表示系统中的物理页&#x…

区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测

区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 区间预测 | MATLAB实现QRCNN卷积神经网络分位数回归时间序列区间预测…

超级详细的 FinalShell 安装 及使用教程

一、引言 FinalShell 是一款免费的国产的集 SSH 工具、服务器管理、远程桌面加速的良心软件&#xff0c;同时支持 Windows,macOS,Linux&#xff0c;它不单单是一个 SSH 工具&#xff0c;完整的说法应该叫一体化的的服务器&#xff0c;网络管理软件&#xff0c;在很大程度上可以…

新唐NUC980使用记录(5.10.y内核):在用户应用中使用GPIO

文章目录 目的使用参考与演示使用参考存在的问题问题定位修改设备树使用测试 总结设备树文件内容 目的 GPIO是最基础的外设&#xff0c;使用频率也非常高&#xff0c;这篇文章将简单体验在NUC980 Liunx用户应用中使用GPIO功能。 这篇文章中内容均在下面的开发板上进行测试&am…

【java EE】Redis基础

Redis基础 业务中会遇到的问题&#xff1a; 数据量巨大数据模式的不确定性数据的频繁读数据的频繁更改大量数据的统计分析 集中数据库的特点 Redis简介&#xff1a; Redis&#xff08;Remote Dictionary Server&#xff09;是一个使用ANSI C语言编写的开源数据库高性能的 …

解密Web自动化测试:你需要了解的四大难点

B站首推&#xff01;2023最详细自动化测试合集&#xff0c;小白皆可掌握&#xff0c;让测试变得简单、快捷、可靠https://www.bilibili.com/video/BV1ua4y1V7Db 目录 前言 问题1&#xff1a;测试稳定性 问题2&#xff1a;测试可维护性 问题3&#xff1a;测试性能 问题4&am…

阿里熔断限流框架Sentinel实现流程和动态规则数据源

文章目录 1.简单介绍2.使用示例3.主要实现原理和组成部分4.动态规则数据源 本篇文章主要介绍熔断限流框架Sentinel的使用示例、组成原理和动态规则数据源的实现原理。 1.简单介绍 阿里的熔断限流框架Sentinel基于滑动时间窗口实现熔断限流管控的&#xff0c;支持多样的管控场景…

PHP 基础入门

目录 1、标记 2、注释 3、输出语句 4、关键字 5、常量的定义与使用 6、预定义常量 7、变量的赋值&#xff08;传参赋值与引用赋值&#xff09; 8、可变变量 9、双引号和单引号的区别 10、heredoc结构和nowdoc结构 11、其他符号 1、标记 <?php 和 ?> 是PHP标…

【MySQL】EXPLAIN 语句 各字段 详解

EXPLAIN 语句 概貌 在连接查询的执行计划中&#xff1a; 每个表都会对应一条记录&#xff0c;这些记录的 id 列的值是相同的&#xff1b; 在包含子查询的执行计划中 &#xff1a;每个 select关键字都会对应一个唯一的 id 值。 驱动表&#xff1a;出现在前面的表&#xff1b; …

Apache ECharts 一个基于 JavaScript 的开源可视化图表库

一&#xff1a; ECharts 特性 ECharts&#xff0c;一个使用 JavaScript 实现的开源可视化库&#xff0c;可以流畅的运行在 PC 和移动设备上&#xff0c;兼容当前绝大部分浏览器&#xff08;IE9/10/11&#xff0c;Chrome&#xff0c;Firefox&#xff0c;Safari等&#xff09;&a…

谷歌正在向所有账户推出密码终止技术

谷歌宣布让其个人帐户持有人使用称为“密码”的密码替代登录的一项重大努力。 该功能面向公司的数十亿帐户推出&#xff0c;用户将能够主动寻找并启用它。谷歌表示&#xff0c;它计划在未来几个月推广密码&#xff0c;并开始推动账户持有人将他们传统的用户名和密码登录转换为…

vscode 远程开发:免密登入设置

文章目录 1. vscode 安装2. vscode 插件安装&#xff08;1&#xff09; 中文界面设置&#xff08;2&#xff09; ssh远程插件安装 3. 免密登入 1. vscode 安装 vscode 官网下载地址&#xff1a;https://code.visualstudio.com/ 安装很简单&#xff1a; 可以默认方式&#xff0…

新建一台VMware虚拟机

文章目录 前言一、问题二、步骤1.确认已安装VMware Workstation&#xff0c;已下载Windows 10 光盘镜像2.新建虚拟机pc13.自定义虚拟机pc1的硬件 总结 前言 新建一台VMware虚拟机。 一、问题 本例要求在VMware Workstation软件中创建一台新虚拟机&#xff0c;相关说明如下。 …

Go语言字符串基础

目录 字符串基础 合并和分割字符串 分割 合并 判断是否包含 strings.Contains() 查找子串出现的位置 strings.Index() strings.LastIndex() 字符串基础 1.字符串是由一串Unicode字符组成的序列&#xff0c;每个Unicode字符都占用一个或多个字节的存储空间。 2.字符串…

【腾讯云 Finops Crane 集训营】老板喜欢降本增效?学会 Crane,让腾讯每月省千万的奇迹在你手中上演

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…