<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[sgbl888的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sgbl888</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sgbl888]]></copyright><item><title><![CDATA[预处理指令include]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124806011</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124806011</guid><author>sgbl888</author><pubDate>Mon, 16 May 2022 19:19:56 +0800</pubDate><description><![CDATA[预处理指令 #include 有两种形式：

1、文件名在尖括号内：在编译器包含目录搜索文件,如： #include &lt;stdio.h&gt;

2、文件名在双引号内：先在当前目录搜索文件，若不存在再去编译器包含目录搜索，如：#include "print.c"


对于stdio.h头文件，一般由编译器自带，因此用 &lt;stdio.h&gt;直接在编译器包含目录搜索此文件


//#include &lt;stdio.h&gt; //在编译器目录查找stdio.h头文件
#include "s.]]></description><category></category></item><item><title><![CDATA[预处理指令if、ifdef、ifndef]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124803688</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124803688</guid><author>sgbl888</author><pubDate>Mon, 16 May 2022 17:10:03 +0800</pubDate><description><![CDATA[#if、#ifdef、#ifndef预处理指令没有使用花括号{}，因此需要以#endif作为结束。

对于不满足的代码块会直接被预处理器删除（切记是删除）


#include &lt;stdio.h&gt;
/*
时间：2022-05-16 16:48
作者：sgbl888
功能：预处理指令#if..#elif..#else..#endif、#ifdef...#endif、#ifndef
知识点：
    1、本节讲的预处理指令没有使用花括号，因此需要以#endif结束
    2、本节讲的预处理指令满足]]></description><category></category></item><item><title><![CDATA[typedef给类型起别名]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124800915</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124800915</guid><author>sgbl888</author><pubDate>Mon, 16 May 2022 15:39:36 +0800</pubDate><description><![CDATA[typedef本身并不会创建新的类型，只是给原的类型起个别名而已。

一般形式为：typedef原类型别名


typedef int int_32;

int_32 a = 5, b = 6; //与int a = 5, b = 6;是一样的


typedef几点注意事项：

typedef本身没有创建新类型，只给原有类型起个别名

typdef不像define,define被预处理器替换，typedef不会被预处理器替换

typedef给struct、union起别名时，声明结构体、联合体时就...]]></description><category></category></item><item><title><![CDATA[预处理指令define和undef]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124786699</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124786699</guid><author>sgbl888</author><pubDate>Mon, 16 May 2022 15:02:35 +0800</pubDate><description><![CDATA[#define是由预处理器进行处理的。预处理指令以#号开头以区分其它语句，因只有一行末尾不需要以;分号结束。


#define PRICE 3.2

int main(){

    int num = 100;

    float total= PRICE * num; //预处理后将替换为 float total = 3.2 * num;

return 0;

}




其形式为：#define宏替换体

宏函数

一、替换体前带#号,#号将会以双引号把替...]]></description><category></category></item><item><title><![CDATA[枚举enum(整型常量的集合)]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124758110</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124758110</guid><author>sgbl888</author><pubDate>Fri, 13 May 2022 19:06:06 +0800</pubDate><description><![CDATA[枚举enum是一组被命名的整型常量的集合，是C语言中的一种基本类型。我们平常的星期一到星期日便可声明为枚举enum类型。

注意：

如果枚举成员不设置初始值，默认从0开始累加
	也可给每个枚举成员设置初始值
	枚举成员的值只能是整型（正负数都可以）
	
#include &lt;stdio.h&gt;
/*
时间：2022-05-13 18:51
作者：sgbl888
功能：枚举enum
知识点：
    1、如果枚举成员不设置初始值，默认从0开始累加
    2、也可给每个枚举成员设置初始值
    3]]></description><category></category></item><item><title><![CDATA[联合体union 亦可称为共用体]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124754495</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124754495</guid><author>sgbl888</author><pubDate>Fri, 13 May 2022 16:34:22 +0800</pubDate><description><![CDATA[联合体union&lt;称为共用体亦可&gt;是C语言的一种特殊的结构类型。与结构体struct很相似，除了共同内存、名称不一样，其它使用基本上都一样，包括指针等。

注意点：

union它的成员是共用同一块内存（若对一个成员赋值，其它成员会被覆盖掉）
	union它占用的字节数，是union成员级别最高的类型占用的字节数
	union类似于其它语言的变体（如既可赋值int类型、赋值float类型、字符串类型等）

union联合体名称{

    成员列表

};



#include &l...]]></description><category></category></item><item><title><![CDATA[匿名结构struct]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124754323</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124754323</guid><author>sgbl888</author><pubDate>Fri, 13 May 2022 16:15:30 +0800</pubDate><description><![CDATA[匿名结构即为没有名字的struct，一般作为其它struct成员使用。


#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
/*
时间：2022-05-13 16:02
作者：sgbl888
功能：匿名结构
知识点：
    1、
    2、
    3、
*/
/* struct conact{
    char email[30]; //邮箱
    long long phone; //电话号码
}; */
struct Student{
   ]]></description><category></category></item><item><title><![CDATA[结构struct与函数]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124717873</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124717873</guid><author>sgbl888</author><pubDate>Wed, 11 May 2022 20:18:31 +0800</pubDate><description><![CDATA[结构变量也可作为函数的实参传递。函数指针也可作为结构体的成员。


#include &lt;stdio.h&gt;
/*
时间：2022-05-11 19:58
作者：sgbl888
功能：结构与函数
知识点：
    1、结构变量可作为函数的参数
    2、函数指针也可作为结构体的成员
    3、
*/

struct Student{
    char name[20];
    int num; //学号
    float score; //成绩
    void (*sty)(); //函数]]></description><category></category></item><item><title><![CDATA[结构与指针]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124717020</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124717020</guid><author>sgbl888</author><pubDate>Wed, 11 May 2022 19:37:36 +0800</pubDate><description><![CDATA[当一个指针变量指向一个结构变量，这个指针就成了结构指针变量

语法如下：

struct 结构名称 * 结构指针名称


struct Student * pst; //定义一个结构指针变量pst


注意点：

结构变量名不会转为内存首地址
	数组名会转为内存首地址


结构指针变量访问方式：

(*结构指针名称).成员名称
	结构指针名称-&gt;成员名称
	点号 .优先级高于星号 *

#include &lt;stdio.h&gt;
/*
时间：2022-05-11 19:19
作者：sgbl88.]]></description><category></category></item><item><title><![CDATA[结构struct嵌套]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124716779</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124716779</guid><author>sgbl888</author><pubDate>Wed, 11 May 2022 19:18:07 +0800</pubDate><description><![CDATA[结构还可以嵌套结构，但不能嵌套自身（嵌套自身的指针除外）


#include &lt;stdio.h&gt;
/*
时间：2022-05-11 19:08
作者：sgbl888
功能：结构嵌套
知识点：
    1、不能嵌套自身结构
    2、可以嵌套自身结构指针
    3、
*/
struct conact{
    char email[30]; //电子邮件
    unsigned long long int phone; //联系电话
};
struct Student{
    ch]]></description><category></category></item><item><title><![CDATA[结构struct数组]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124716273</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124716273</guid><author>sgbl888</author><pubDate>Wed, 11 May 2022 19:03:48 +0800</pubDate><description><![CDATA[结构体struct也是一种数据类型，它也可以作为数组元素的类型

结构数组定义 

定义形式：

struct 结构名称{

    成员列表

}数组名称[元素个数];


struct Student{
    char name[20];
    short num;
    float score;
}sar[2]; //有2两个元素的结构数组

结构数组初始化：




    struct Student{      //Student为结构体名称
        char name[...]]></description><category></category></item><item><title><![CDATA[结构体struct初始化、访问]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124714797</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124714797</guid><author>sgbl888</author><pubDate>Wed, 11 May 2022 17:48:39 +0800</pubDate><description><![CDATA[结构成员访问：

    虽然结构类似于数组，数组是由相同类型组成，而结构是可由不同类型组成的。数组可通过下标访问，但结构体不能。结构要访问成员，须通过结构成员运算符.点号


struct Student{      //Student为结构体名称
    char name[20];  //学生姓名
    int num;       //学生学号
    float score;   //学生成绩
};

struct Student st1; //定义结构体变量st1
strcpy(s...]]></description><category></category></item><item><title><![CDATA[结构体struct声明、定义]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124714094</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124714094</guid><author>sgbl888</author><pubDate>Wed, 11 May 2022 17:19:01 +0800</pubDate><description><![CDATA[结构体是一种构造类型（结构体、数组、联合类型），结构体弥补了数组不能存储多种类型的缺陷（即结构体是由于相同类型或不同类的成员组成）

一般声明形式如：

struct 结构体名称 {

成员列表

};


struct Student{      //Student为结构体名称
    char name[20];  //学生姓名
    int num;       //学生学号
    float score;   //学生成绩
};

上面声明了3个不同类型成员的结构体，每个成员以 ...]]></description><category></category></item><item><title><![CDATA[字符指针与字符串]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124668608</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124668608</guid><author>sgbl888</author><pubDate>Mon, 09 May 2022 16:52:11 +0800</pubDate><description><![CDATA[字符串与字符数组几个注意点：

字符串本质是字符数组，以\0结尾。sizeof("hello);结果是6而非5，因为后面多一个\0的结束符
	字符串常量是不可修改。char * str = "hello"; *str = 'H';是错误的
	不能对字符数组名进行运算。如：char str[3] = "ha"; str++;也是错误的
	字符串结束是数值0（ASCII码值0），而不是字符'0'(ASCII码值48)。为了不与数值0冲突，用转义符\0表示
	
//初始化列表长度小于字符数组长度
char str]]></description><category></category></item><item><title><![CDATA[void指针]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124559025</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124559025</guid><author>sgbl888</author><pubDate>Tue, 03 May 2022 18:31:21 +0800</pubDate><description><![CDATA[void指针是一种不确定类型的指针，任何指针都可转换为void指针。

前面的文章说过，指针有两个非常重要的信息：

指针的值（指针目标对象的内存首地址）
	指针指向对象的类型
注意点：void指针只保存了 指针的值并没有记录指针指向对象的类型。因此在用到对void指针解引时，需要先把void指针转换成原本的数据类型。

如：


int n = 500; //定义一个int变量

int * p = &amp;n; //定义int类型指针

void * pv = p; //定义void指针，只保存了..]]></description><category></category></item><item><title><![CDATA[const关键字修饰的对象]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124555174</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124555174</guid><author>sgbl888</author><pubDate>Tue, 03 May 2022 15:09:11 +0800</pubDate><description><![CDATA[我们知道const是常量的意义，下面详解一下const在不同场景的用途

一、const修饰基础类型，此变量的值无法被修改。

int a = 5; //此时可修改，若改为const int a = 5 或 int const a = 5 就无法修改其值

二、const修饰指针

当const在*号左边时，const修饰的是指针指向的数据（无法修改其值）。const int * p1 = &amp;a; //无法通过 *p1 = 6 改变指针指向的值。可通过 p1 = &amp;b改变指...]]></description><category></category></item><item><title><![CDATA[函数指针数组]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124542872</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124542872</guid><author>sgbl888</author><pubDate>Mon, 02 May 2022 16:41:34 +0800</pubDate><description><![CDATA[函数指针与数组：即把函数的指针作为数组元素

语法：

函数返回值类型 (*函数标识[数组元素个数]) (函数形参) = {数组元素1，元素2...};


#include &lt;stdio.h&gt;
/*
时间：2022-05-01 16:09
作者：sgbl888
功能：函数指针与数组(根据输入的数字播放电影)
知识点：
    1、
    2、
    3、
*/
void yzwc(){
    printf("1、雍正王朝\n");
}
void dmwc1566(){
    print]]></description><category></category></item><item><title><![CDATA[初步学习函数指针]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124542351</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124542351</guid><author>sgbl888</author><pubDate>Mon, 02 May 2022 16:24:33 +0800</pubDate><description><![CDATA[函数指针：函数类型的指针，首先是一个指针，指向的是一个函数。

语法如下：

函数返回值类型 (*指针标识) (函数形参) = 函数标识;

如：int (*pmax) (int x, int y)() =Max; //函数名称在表达式中会转换为函数的指针


#include &lt;stdio.h&gt;
/*
时间：2022-05-02 16:10
作者：sgbl888
功能：函数指针
知识点：
    1、函数名称在表达式中会转换为函数的指针
    2、可把函数声明的函数名称换成 (*函数指针名称]]></description><category></category></item><item><title><![CDATA[数组指针与二维数组]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124517322</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124517322</guid><author>sgbl888</author><pubDate>Sat, 30 Apr 2022 20:01:35 +0800</pubDate><description><![CDATA[数组指针：理解为数组类型的指针，首先是一个指针，指向的是数组（中国人修饰词往往放在前面，而西方往往放在后面）。

语法（为了区分数组指针和指针数组，数组指针用()括起）：

目标数据类型 (*指针名称)[目标数组大小]。如 int (*p)[3]


#include &lt;stdio.h&gt;
/*
时间：2022-04-30 19:30
作者：sgbl888
功能：数组指针
知识点：
    1、数组指针首先是一个指针，指向的是数组
    2、
    3、
*/
int main(){
    ]]></description><category></category></item><item><title><![CDATA[指针与二维数组名关于地址相同的问题解答]]></title><link>https://blog.youkuaiyun.com/sgbl888/article/details/124514157</link><guid>https://blog.youkuaiyun.com/sgbl888/article/details/124514157</guid><author>sgbl888</author><pubDate>Sat, 30 Apr 2022 16:21:23 +0800</pubDate><description><![CDATA[指针有两个非常重要的信息：

指针的值是目标对象的内存首地址
	指针的类型是目标对象数据的类型
这两个信息若忘掉其中一点，很容易把指针与多维数组搞乱。我自己开始学习指针与二维数组时就感觉学得有点乱。只要是体现在指针移动的问题（就是把指针第二个重要信息忽略了）。

把指针的类型对应的步长搞明白了，指针移动也就理解清楚了



上图中，虽然p1、p2、p3打印出来的内存首地址全部相同，但步长是完全不同。主要是指针的类型决定了指针移动的步长。可以分别对上面三个地址+1，就很显示看出是不同的。


#includ.]]></description><category></category></item></channel></rss>