C语言重点语法知识
创始人
2024-01-29 20:53:55
0

一、结构体

 1. 结构体指针

 与一般指针类似结构体也可以使用结构体指针进行引用使用。结构体指针的定义方式如下:

struct Student stu = { 1001,"Li Lei",'M',1.87 };  //定义一个Student 的结构体变量stu
struct Student *p=&stu;    //定义一个Student的结构体指针变量来指向stu

当程序中定义了一个指向结构体变量的指针,就可以通过“指针名->成员变量名”的方式访问结构体变量的成员。 

#include typedef char NAME[10];
typedef double DOU;
typedef struct Student
{int num;NAME name;char sex;DOU height;}Stu;int main() {Stu stu = { 1001,"Li Lei",'M',1.87 };Stu* p = &stu;printf("学生信息:\n");printf("学号:%d\n", p->num);printf("姓名:%s\n", p->name);printf("性别:%c\n", p->sex);printf("年龄:%.2lf\n", p->height);
}

2. 结构体数组

指针可以指向结构体数组,即将结构体数组的起始地址赋给指针变量,这种指针就是结构体数组指针。

#include struct Student
{int num;char name[10];char sex;double height;};struct Student stus[3] = { {1001,"Li Lei",'M',1.78},{1002,"Li Hua",'M',1.87},{1003,"Han Mei",'W',1.65}};int main() {struct Student* p=stus ;//定义结构体数组指针p指向结构体数组stusfor (int i = 0; i < 3; i++) {printf("学生%d的信息\n", i + 1);printf("学号:%d\n", p->num);printf("姓名:%s\n", p->name);printf("性别:%c\n", p->sex);printf("身高:%.2lf\n", p->height);printf("\n");p++;}}

二、字符数组与字符串常量

两者主要的区别是所在存储区域不同,字符数组存储在栈或全局数据区中,而字符串常量存储在常量区中。

因此,字符数组可以更改,而字符串常量无法修改。

1. 字符常量

字符常量是一个用单引号括起来的单个字符(或字符转义序列或三字母词)。

2. 字符数组

字符数组是指用来存放字符数据的数组,每一个元素放一个字符。

使用字符串进行初始化字符数组,字符串中的每个字符均存储在字符数组中。

char string[] = "hello, world";

3.字符串常量

字符串常量是一个双引号括起来若干字符的序列。

"hello, world"为字符串常量被保存在常量区,其值不允许被修改。p保存的是该字符串常量的地址。

char *p = "hello, world";

三、预处理器

C语言预处理器是个简单的宏处理器,从概念上处理C程序源文本之后再让编译器正确读取源程序。在C语言的某些实现产品中,预处理器实际上是一个独立的程序,它读取原始的源文件并输出新的经过预处理的源文件,以作为C语言编译器的输入。在另一些实现产品中,一个程序一次性对源文件进行预处理和编译。

预处理器用特殊的预处理器命令行控制,这些命令行以字符#开头,不包含预处理器命令的行成为源程序文本行。

预处理器命令
命令含义
#define定义预处理器宏
#undef取消预处理器宏定义
#include插入另一源文件中的文本
#if根据常量表达式值有条件地包括一些文本
#ifdef根据是否定义宏名有条件地包括一些文本
#ifndef根据与 #ifdef 相反的测试有条件地包括一些文本
#else上述 #if、#ifdef、ifndef 或 #elif 测试失败时包括一些文本
#endif终止条件文本
#line提供编译器信息的行号
#elif上述  #if、#ifdef、ifndef 或 #elif 测试失败时根据另一常量表达式值包括一些文本
defined预处理器函数,在一个名称定义为预处理器宏时为1,否则为0
#运算符将宏参数换成包含参数值的字符串常量
##运算符从两个相邻记号生成一个记号
#pragma对编译器指定实现相关信息
#error将编译器错误换成指定消息

1. 词法规则

#define GETMATH #include 
GETMATH

上述代码经过预处理器处理后得到的C语言代码为如下,编译器是无法进行编译的。

#include 

预处理器将注释看作空白,不会进行任何替代。

2. 定义和替代

#define 预处理器命令把名称(标识符)定义为预处理器的宏,成为宏体的记号序列与这个名称相关联。预处理器在源文本中识别到宏名时,将使用宏体替换宏名

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...