当前位置: 首页 > news >正文

C 语 言 --- 指 针 4(习 题)

C 语 言 --- 指 针 4(习 题)

  • sizeof
  • strlen
  • 整 型 数 组 - - - int a[ ]
  • 字 符 数 组 - - - char arr[ ]
  • 字 符 数 组 - - - char arr1[ ]
  • 字 符 串 常 量 指 针 - - - char arr[ ]
  • 二 维 数 组 - - - char arr[3][4]
  • 总结

💻作 者 简 介:曾 与 你 一 样 迷 茫,现 以 经 验 助 你 入 门 C 语 言
💡个 人 主 页:@笑 口 常 开 xpr 的 个 人 主 页
📚系 列 专 栏:C 启 新 程
✨代 码 趣 语:欲 速 则 不 达,在 编 程 中,耐 心 和 细 心 是 比 速 度 更 重 要 的 品 质。
💪代 码 千 行,始 于 坚 持,每 日 敲 码,进 阶 编 程 之 路。
📦gitee 链 接:gitee

在这里插入图片描述

         在 编 程 的 世 界 里,每 一 行 代 码 都 可 能 隐 藏 着 无 限 的 可 能 性 。你 是 否 想 过,一 个 小 小 的 程 序 究 竟 能 改 变 什 么?它 可 以 是 解 决 复 杂 问 题 的 工 具 ,也 可 以 是 实 现 梦 想 的 桥 梁。今 天,就 让 我 们 一 起 走 进 C 语 言 的 世 界,探 索 它 的 无 限 潜 力。

sizeof

定 义

         sizeof 是 C 语 言 里 的 一 个 运 算 符,并 非 函 数,它 的 作 用 是 计 算 数 据 类 型 或 者 变 量 所 占 内 存 的 字 节 数。

使 用 方 法

计 算 数 据 类 型 的 大 小

sizeof(数据类型);

计 算 变 量 的 大 小

sizeof(变量名);

省 略 括 号

sizeof 变量名;

注 意

sizeof 是 在 编 译 时 计 算 的,所 以 它 不 会 对 表 达 式 进 行 求 值。

strlen

定 义

         strlen 是 C 语 言 标 准 库<string.h> 中 的 一 个 函 数,它 的 主 要 功 能 是 计 算 字 符 串 的 长 度。

函 数 原 型

size_t strlen(const char *str);

参 数:str 是 一 个 指 向 以 ‘\0’( 空 字 符 )结 尾 的 字 符 串 的 指 针。
返 回 值:函 数 返 回 一 个 size_t 类 型 的 值,该 值 表 示 字 符 串 str 中 字 符 的 数 量,不 包 含 字 符 串 结 束 符 ‘\0’。

功 能

         strlen 函 数 会 从 传 入 的 字 符 串 指 针 开 始,逐 个 字 符 地 计 数,直 到 遇 到 字 符 串 结 束 符 ‘\0’ 为 止,然 后 返 回 所 计 的 字 符 数。

注 意

字 符 串 必 须 以 ‘\0’ 结 尾

         strlen 函 数 依 赖 于 字 符 串 结 束 符 ‘\0’ 来 确 定 字 符 串 的 结 束 位 置。如 果 传 入 的 字 符 串 没 有 以 ‘\0’ 结 尾,strlen 函 数 会 继 续 向 后 计 数,直 到 遇 到 内 存 中 的 某 个 ‘\0’ 为 止,这 可 能 会 导 致 未 定 义 行 为。

返 回 值 类 型

         strlen 函 数 的 返 回 值 类 型 是 size_t,这 是 一 个 无 符 号 整 数 类 型。在 进 行 比 较 或 算 术 运 算 时,要 注 意 避 免 有 符 号 整 数 和 无 符 号 整 数 之 间 的 隐 式 转 换 可 能 带 来 的 问 题。

整 型 数 组 - - - int a[ ]

指 针 的 大 小

         指 针 的 大 小 与 指 针 的 类 型 无 关在 32 位 系 统 中 指 针 大 小 一 般 是 4 字 节,在 64 位 系 统 中 指 针 大 小 一 般 是 8 字 节。本 篇 博 客 的 代 码 均 以 64 位 的 系 统 为 例 计 算 指 针 的 大 小。

修 改 32 位 和 64 位 的 系 统

         以 VS2022 为 例,点 击 如 图 所 示 的 方 框,选 择 X64 即 是 64 位 的 系 统,选 择 X86 即 是 32 位 的 系 统。

在这里插入图片描述

下 面 展 示代 码 示 例

#include<stdio.h>
int main()
{int a[] = { 1,2,3,4 };printf("sizeof(a)         = %zu\n", sizeof(a));      printf("sizeof(a + 0)     = %zu\n", sizeof(a + 0));  printf("sizeof(*a)        = %zu\n", sizeof(*a));     printf("sizeof(a + 1)     = %zu\n", sizeof(a + 1));  printf("sizeof(a[1])      = %zu\n", sizeof(a[1]));  printf("sizeof(&a)        = %zu\n", sizeof(&a));     printf("sizeof(*&a)       = %zu\n", sizeof(*&a));    printf("sizeof(&a + 1)    = %zu\n", sizeof(&a + 1)); printf("sizeof(&a[0])     = %zu\n", sizeof(&a[0])); printf("sizeof(&a[0] + 1) = %zu\n", sizeof(&a[0] + 1));return 0;
}

温 馨 提 示:读 者 们 ,先 自 己 计 算 结 果,这 是 提 升 编 程 能 力 的 好 机 会。若 未 达 要 求 ,别 气 馁 ,参 考 下 文 解 释 会 有 新 收 获。

在这里插入图片描述

代 码 解 析

sizeof(a)

         a 是 数 组 名,数 组 名 是 数 组 首 元 素 的 地 址。sizeof(a) 计 算 的 是 整 个 数 组 所 占 用 的 内 存 字 节 数。因 为 数 组 a 里 有 4 个 int 类 型 的 元 素,int 类 型 占 4 个 字 节,所 以 sizeof(a) 的 结 果 为 4 * 4 = 16 字节。

sizeof(a + 0)

         a 是 数 组 名,数 组 名 是 数 组 首 元 素 的 地 址。a + 0 实 际 上 就 是 数 组 a 首 元 素 向 后 偏 移 0 * 4 个 字 节 的 指 针,也 就 是 指 向 数 组 首 元 素 的 指 针,是 指 针,所 以 sizeof(a + 0) 是 4 或 者 8 个 字 节。

*sizeof(a)

         a 是 数 组 名,数 组 名 是 数 组 首 元 素 的 地 址。*a 等 同 于 a[0],也 就 是 数 组 a 的 首 元 素。由 于 数 组 元 素 的 类 型 是 int,所 以 sizeof(*a) 计 算 的 是 一 个 int 类 型 变 量 的 大 小,通 常 为 4 个 字 节。

sizeof(a + 1)

         a 是 数 组 名,数 组 名 是 数 组 首 元 素 的 地 址。a + 1 实 际 上 就 是 数 组 a 首 元 素 向 后 偏 移 1 * 4 个 字 节 的 指 针,也 就 是 指 向 数 组 第 二 个 元 素 的 指 针,所 以 sizeof(a + 1) 是 4 或 者 8 个 字 节。

sizeof(a[1])

         a[1] 表 示 数 组 a 的 第 二 个 元 素,其 类 型 为 int。所 以 sizeof(a[1]) 计 算 的 是 一 个 int 类 型 变 量 的 大 小,为 4 个 字 节。

sizeof(&a)

         a 是 数 组 名,数 组 名 是 数 组 首 元 素 的 地 址。&a 是 取 出 整 个 数 组 的 地 址,它 的 类 型 是 int (*)[4]。所 以 sizeof(&a) 是 4 或 者 8 个 字 节。

sizeof(*&a)

         &a 是 指 向 整 个 数 组 的 指 针,对 其 进 行 解 引 用 * &a 得 到 的 就 是 整 个 数 组。所以 sizeof(*&a) 计 算 的 结 果 是 数 组 的 大 小,即 4 * 4 = 16 个 字 节。

sizeof(&a + 1)

         &a 是 指 向 整 个 数 组 的 指 针,&a + 1 跳 过 整 个 数 组 指 向 的 是 数 组 a 后 面 的 空 间,此 时 没 有 越 界 访 问。所 以 sizeof(&a+1) 是 4 或 者 8 个 字 节。

** sizeof(&a[0])**

&a[0] 是 指 向 数 组 a 首 元 素 的 指 针。所 以 sizeof(&a[0]) 是 4 或 者 8 个 字 节。

sizeof(&a[0]+1)

         &a[0] 是 指 向 数 组 a 首 元 素 的 指 针,&a[0] + 1 是 指 向 数 组 a 第 二 个 元 素 的 指 针。sizeof(&a[0]+1) 是 4 或 者 8 个 字 节。

字 符 数 组 - - - char arr[ ]

下 面 展 示代 码 示 例

#include<stdio.h>
#include<string.h>
int main()
{char arr[] = { 'a','b','c','d','e','f' };printf("sizeof(arr)         = %zu\n", sizeof(arr));printf("sizeof(arr + 0)     = %zu\n", sizeof(arr + 0));printf("sizeof(*arr)        = %zu\n", sizeof(*arr));printf("sizeof(arr + 1)     = %zu\n", sizeof(arr + 1));printf("sizeof(arr[1])      = %zu\n", sizeof(arr[1]));printf("sizeof(&arr)        = %zu\n", sizeof(&arr));printf("sizeof(&arr + 1)    = %zu\n", sizeof(&arr + 1));printf("sizeof(&arr[0] + 1) = %zu\n", sizeof(&arr[0] + 1));printf("strlen(arr)         = %zd\n", strlen(arr));printf("strlen(arr + 0)     = %zd\n", strlen(arr + 0));printf("strlen(*arr)        = %zd\n", strlen(*arr));printf("strlen(arr[1])      = %zd\n", strlen(arr[1]));printf("strlen(&arr)        = %zd\n", strlen(&arr));printf("strlen(&arr + 1)    = %zd\n", strlen(&arr + 1));printf("strlen(&arr[0] + 1) = %zd\n", strlen(&arr[0] + 1));return 0;
}

温 馨 提 示:读 者 们 ,先 自 己 计 算 结 果,这 是 提 升 编 程 能 力 的 好 机 会。若 未 达 要 求 ,别 气 馁 ,参 考 下 文 解 释 会 有 新 收 获。

在这里插入图片描述

代 码 解 析

sizeof(arr)

         arr 是 数 组 名,数 组 名 是 数 组 首 元 素 的 地 址。sizeof(arr) 计 算 的 是 整 个 数 组 所 占 用 的 内 存 字 节 数。因 为 字 符 数 组 a 里 有 6 个 char 类 型 的 元 素,char 类 型 占 4 个 字 节,所 以 sizeof(arr) 的 结 果 为 6 * 1 = 6 字节。

sizeof(arr + 0)

         arr 是 数 组 名,数 组 名 是 数 组 首 元 素 的 地 址。arr + 0 实 际 上 就 是 数 组 arr 首 元 素 向 后 偏 移 1 * 0 个 字 节 的 指 针,也 就 是 指 向 数 组 首 元 素 的 指 针,是 指 针,所 以 sizeof(a + 0) 是 4 或 者 8 个 字 节。

*sizeof(arr)

         arr 是 数 组 名,数 组 名 是 数 组 首 元 素 的 地 址。*arr 等 同 于 arr[0],也 就 是 数 组 arr 的 首 元 素。由 于 数 组 元 素 的 类 型 是 char,所 以 sizeof(*arr) 计 算 的 是 一 个 char 类 型 变 量 的 大 小,通 常 为 1 个 字 节。

sizeof(arr + 1)

         arr 是 数 组 名,数 组 名 是 数 组 首 元 素 的 地 址。arr + 1 实 际 上 就 是 数 组 arr 首 元 素 向 后 偏 移 1 * 1 个 字 节 的 指 针,也 就 是 指 向 数 组 第 二 个 元 素 的 指 针,所 以 sizeof(arr + 1) 是 4 或 者 8 个 字 节。

sizeof(arr[1])

         arr[1] 表 示 数 组 arr 的 第 二 个 元 素,其 类 型 为 char。所 以 sizeof(arr[1]) 计 算 的 是 一 个 char 类 型 变 量 的 大 小,为 1 个 字 节。

sizeof(&arr)

         arr 是 数 组 名,数 组 名 是 数 组 首 元 素 的 地 址。&arr 是 取 出 整 个 数 组 的 地 址,它 的 类 型 是 char (*)[6]。所 以 sizeof(&arr) 是 4 或 者 8 个 字 节。

sizeof(&arr + 1)

         &arr 是 指 向 整 个 数 组 的 指 针,&arr + 1 跳 过 整 个 数 组 指 向 的 是 数 组 arr 后 面 的 空 间,此 时 没 有 越 界 访 问。所 以 sizeof(&arr+1) 是 4 或 者 8 个 字 节。

sizeof(&arr[0]+1)

         &arr[0] 是 指 向 数 组 arr 首 元 素 的 指 针,&arr[0] + 1 是 指 向 数 组 arr 第 二 个 元 素 的 指 针。sizeof(&arr[0]+1) 是 4 或 者 8 个 字 节。

strlen(arr)

         strlen 用 于 计 算 字 符 串 的 长 度,它 会 从 传 入 的 指 针 所 指 向 的 位 置 开 始,一 直 向 后 查 找 直 到 遇 到 字 符 串 结 束 符 ‘\0’。由 于 arr 数 组 中 没 有 ‘\0’,所 以 它 会 继 续 向 后 查 找,直 到 找 到 ‘\0’ 为 止,所 以 代 码 中 的 结 果 是 随 机 值。

strlen(arr + 0)

         arr + 0 意 味 着 从 数 组 首 元 素 开 始,向 后 偏 移 0 * 1 个 字 节,也 就 是 指 向 数 组 的 首 元 素。strlen(arr + 0) 会 以 该 指 针 所 指 向 的 位 置 作 为 起 始 点,持 续 向 后 查 找,直 至 碰 到 字 符 串 结 束 符 ‘\0’。但 由 于 数 组 arr 里 并 未 包 含 ‘\0’,所 以 该 函 数 会 持 续 在 内 存 中 向 后 查 找,直 至 找 到 ‘\0’ 才 会 停 止。这 就 导 致 代 码 运 行 时,strlen(arr + 0) 的 结 果 是 随 机 的。

*strlen(arr)

         *arr 是 数 组 的 首 元 素 ‘a’,它 是 一 个 字 符,而 strlen 函 数 期 望 的 参 数 是 一 个 指 针,这 里 会 把 字 符 ‘a’ 的 ASCII 值(97)当 作 地 址 传 递 给 strlen 函 数,这 会 导 致 未 定 义 行 为,所 以 导 致 程 序 崩 溃。

strlen(arr[1])

         arr[1] 是 数 组 的 第 二 个 元 素 ‘b’,同 样 是 一 个 字 符,把 字 符 ‘b’ 的 ASCII 值(98)当 作 地 址 传 递 给 strlen 函 数,会 导 致 未 定 义 行 为,所 以 导 致 程 序 崩 溃。

strlen(&arr)

         &arr 是 指 向 整 个 数 组 的 指 针,strlen 函 数 期 望 的 是 指 向 字 符 的 指 针,这 里 会 把 指 向 数 组 的 指 针 当 作 指 向 字 符 的 指 针 处 理,会 导 致 未 定 义 行 为。

strlen(&arr+1)

         &arr + 1 是 将 指 向 整 个 数 组 的 指 针 向 后 移 动 一 个 数 组 的 长 度,然 后 把 这 个 指 针 当 作 指 向 字 符 的 指 针 传 递 给 strlen 函 数,会 导 致 未 定 义 行 为。

strlen(&arr[0]+1)

         &arr[0] + 1 是 指 向 数 组 第 二 个 元 素 的 指 针,由 于 数 组 中 没 有 ‘\0’,会 导 致 未 定 义 行 为,它 会 继 续 向 后 查 找 直 到 找 到 ‘\0’ 为 止。

下 面 展 示修 改 后 的 代 码

#include<stdio.h>
#include<string.h>
int main()
{char arr[] = { 'a','b','c','d','e','f','\0'};printf("sizeof(arr)         = %zu\n", sizeof(arr));printf("sizeof(arr + 0)     = %zu\n", sizeof(arr + 0));printf("sizeof(*arr)        = %zu\n", sizeof(*arr));printf("sizeof(arr + 1)     = %zu\n", sizeof(arr + 1));printf("sizeof(arr[1])      = %zu\n", sizeof(arr[1]));printf("sizeof(&arr)        = %zu\n", sizeof(&arr));printf("sizeof(&arr + 1)    = %zu\n", sizeof(&arr + 1));printf("sizeof(&arr[0] + 1) = %zu\n", sizeof(&arr[0] + 1));printf("strlen(arr)         = %zd\n", strlen(arr));printf("strlen(arr + 0)     = %zd\n", strlen(arr + 0));//printf("strlen(*arr)        = %zd\n", strlen(*arr));//printf("strlen(arr[1])      = %zd\n", strlen(arr[1]));printf("strlen(&arr)        = %zd\n", strlen(&arr));printf("strlen(&arr + 1)    = %zd\n", strlen(&arr + 1));printf("strlen(&arr[0] + 1) = %zd\n", strlen(&arr[0] + 1));return 0;
}

在这里插入图片描述

字 符 数 组 - - - char arr1[ ]

下 面 展 示代 码 示 例

#include<stdio.h>
#include<string.h>
int main()
{char arr1[] = "abcdef";printf("sizeof(arr1)         = %zu\n", sizeof(arr1));printf("sizeof(arr1 + 0)     = %zu\n", sizeof(arr1 + 0));printf("sizeof(*arr1)        = %zu\n", sizeof(*arr1));printf("sizeof(arr1[1])      = %zu\n", sizeof(arr1[1]));printf("sizeof(&arr1)        = %zu\n", sizeof(&arr1));printf("sizeof(&arr1 + 1)    = %zu\n", sizeof(&arr1 + 1));printf("sizeof(&arr1[0] + 1) = %zu\n", sizeof(&arr1[0] + 1));printf("strlen(arr1)         = %zd\n", strlen(arr1));printf("strlen(arr1 + 0)     = %zd\n", strlen(arr1 + 0));//printf("strlen(*arr1)        = %zd\n", strlen(*arr1));//printf("strlen(arr1[1])      = %zd\n", strlen(arr1[1]));printf("strlen(&arr1)        = %zd\n", strlen(&arr1));printf("strlen(&arr1 + 1)    = %zd\n", strlen(&arr1 + 1));printf("strlen(&arr1[0] + 1) = %zd\n", strlen(&arr1[0] + 1));return 0;
}

温 馨 提 示:读 者 们 ,先 自 己 计 算 结 果,这 是 提 升 编 程 能 力 的 好 机 会。若 未 达 要 求 ,别 气 馁 ,参 考 下 文 解 释 会 有 新 收 获。

在这里插入图片描述

         需 要 注 意 的 是,与 arr 相 比,arr1 的 末 尾 包 含 ‘\0’,而 arr 末 尾 没 有 ‘\0’。由 于 arr1 和 arr 的 分 析 方 法 相 似,此 处 不 再 重 复 说 明

字 符 串 常 量 指 针 - - - char arr[ ]

下 面 展 示代 码 示 例

#include<stdio.h>
#include<string.h>
int main()
{const char* p = "abcdef";printf("sizeof(p)         = %zu\n", sizeof(p));printf("sizeof(p + 1)     = %zu\n", sizeof(p + 1));printf("sizeof(*p)        = %zu\n", sizeof(*p));printf("sizeof(p[0])      = %zu\n", sizeof(p[0]));printf("sizeof(&p)        = %zu\n", sizeof(&p));printf("sizeof(&p + 1)    = %zu\n", sizeof(&p + 1));printf("sizeof(&p[0] + 1) = %zu\n", sizeof(&p[0] + 1));printf("strlen(p)         = %zd\n", strlen(p));printf("strlen(p + 1)     = %zd\n", strlen(p + 1));printf("strlen(*p)        = %zd\n", strlen(*p));printf("strlen(p[0])      = %zd\n", strlen(p[0]));printf("strlen(&p)        = %zd\n", strlen(&p));printf("strlen(&p + 1)    = %zd\n", strlen(&p + 1));printf("strlen(&p[0] + 1) = %zd\n", strlen(&p[0] + 1));return 0;
}

温 馨 提 示:读 者 们 ,先 自 己 计 算 结 果,这 是 提 升 编 程 能 力 的 好 机 会。若 未 达 要 求 ,别 气 馁 ,参 考 下 文 解 释 会 有 新 收 获。

在这里插入图片描述

代 码 解 析

下 面 展 示代 码 解 析

#include<stdio.h>
#include<string.h>
int main()
{const char* p = "abcdef";//定义一个指向字符串常量"abcdef"的指针 pprintf("sizeof(p)         = %zu\n", sizeof(p));//sizeof(p)//p是一个指针,在64位系统中,指针的大小通常是8字节,在32位系统中是4字节//sizeof操作符计算的是指针本身所占的内存大小,而不是指针所指向的内容的大小printf("sizeof(p + 1)     = %zu\n", sizeof(p + 1));//sizeof(p + 1)//p + 1是指针运算,它会让指针p向后移动一个字符的位置,但它仍然是一个指针//所以sizeof(p + 1)同样是计算指针的大小,结果和sizeof(p)一样printf("sizeof(*p)        = %zu\n", sizeof(*p));//sizeof(*p)//*p是对指针p进行解引用操作,得到的是指针p所指向的第一个字符'a'//字符类型在C语言中占1字节,所以sizeof(*p)的结果是 1printf("sizeof(p[0])      = %zu\n", sizeof(p[0]));//sizeof(p[0])//p[0]等价于*(p + 0),也就是指针p所指向的第一个字符'a'//字符类型占1字节,所以sizeof(p[0])的结果是1printf("sizeof(&p)        = %zu\n", sizeof(&p));//sizeof(&p)//&p是取指针p的地址,它是一个指向指针的指针//但无论是什么类型的指针,在64位系统中大小通常是8字节,32位系统中是4字节printf("sizeof(&p + 1)    = %zu\n", sizeof(&p + 1));//sizeof(&p + 1)//&p + 1是将指向指针p的指针向后移动一个指针大小的位置//它仍然是一个指针,所以sizeof(&p + 1)计算的还是指针的大小printf("sizeof(&p[0] + 1) = %zu\n", sizeof(&p[0] + 1));//sizeof(&p[0] + 1)//&p[0]是取指针p所指向的第一个字符的地址,&p[0] + 1是将该地址向后移动一个字符的位置//它还是一个指针,因此sizeof(&p[0] + 1)计算的也是指针的大小printf("strlen(p)         = %zd\n", strlen(p));//strlen(p)//strlen函数用于计算字符串的长度,它从指针p所指向的位置开始//一直向后查找直到遇到字符串结束符'\0'//这里字符串"abcdef"的长度是6,所以strlen(p)的结果是6printf("strlen(p + 1)     = %zd\n", strlen(p + 1));//strlen(p + 1)//p + 1让指针p向后移动一个字符的位置,指向'b'//从'b'开始到字符串结束符'\0'的长度是5,所以strlen(p + 1)的结果是5printf("strlen(*p)        = %zd\n", strlen(*p));//strlen(*p)//*p是字符'a',而strlen函数期望的参数是一个指针//这里会把字符'a'的ASCII值(97)当作地址传递给strlen函数//这会导致未定义行为,会使程序崩溃printf("strlen(p[0])      = %zd\n", strlen(p[0]));//strlen(p[0])//p[0]等价于'a',和strlen(*p)一样,把字符'a'的ASCII值当作地址传递给strlen函数,//会导致未定义行为printf("strlen(&p)        = %zd\n", strlen(&p));//strlen(&p)//&p是指向指针p的指针,strlen函数期望的是指向字符的指针//把指向指针的指针传递给strlen函数会导致未定义行为printf("strlen(&p + 1)    = %zd\n", strlen(&p + 1));//strlen(&p + 1)//&p + 1是将指向指针p的指针向后移动一个指针大小的位置//同样把它传递给strlen函数会导致未定义行为printf("strlen(&p[0] + 1) = %zd\n", strlen(&p[0] + 1));//strlen(&p[0] + 1)//&p[0] + 1指向字符串"abcdef"中的'b'//从'b'开始到字符串结束符'\0'的长度是5,所以strlen(&p[0] + 1)的结果是5return 0;
}

         与 字 符 数 组 不 同,字 符 常 量 数 组 中 的 值 不 允 许 被 修 改,因 此 通 常 需 要 用 const 关 键 字 修 饰 以 确 保 程 序 的 严 谨 性

二 维 数 组 - - - char arr[3][4]

下 面 展 示代 码 示 例

#include<stdio.h>
int main()
{int a[3][4] = { 0 };printf("sizeof(a)            = %zu\n", sizeof(a));printf("sizeof(a[0][0])      = %zu\n", sizeof(a[0][0]));printf("sizeof(a[0])         = %zu\n", sizeof(a[0]));printf("sizeof(a[0] + 1)     = %zu\n", sizeof(a[0] + 1));printf("sizeof(*(a[0] + 1))  = %zu\n", sizeof(*(a[0] + 1)));printf("sizeof(a + 1)        = %zu\n", sizeof(a + 1));printf("sizeof(*(a + 1))     = %zu\n", sizeof(*(a + 1)));printf("sizeof(&a[0] + 1)    = %zu\n", sizeof(&a[0] + 1));printf("sizeof(*(&a[0] + 1)) = %zu\n", sizeof(*(&a[0] + 1)));printf("sizeof(*a)           = %zu\n", sizeof(*a));printf("sizeof(a[3])         = %zu\n", sizeof(a[3]));return 0;
}

温 馨 提 示:读 者 们 ,先 自 己 计 算 结 果,这 是 提 升 编 程 能 力 的 好 机 会。若 未 达 要 求 ,别 气 馁 ,参 考 下 文 解 释 会 有 新 收 获。

在这里插入图片描述

代 码 解 析

下 面 展 示代 码 解 析

#include<stdio.h>
int main()
{int a[3][4] = { 0 };//定义一个3行4列的二维整型数组a,并初始化为全 0printf("sizeof(a)            = %zu\n", sizeof(a));//sizeof(a)//a代表整个二维数组。二维数组在内存中是连续存储的//这里数组有3行4列,每个元素是int类型,假设int占4字节//那么整个数组的大小就是3 * 4 * 4 = 48字节printf("sizeof(a[0][0])      = %zu\n", sizeof(a[0][0]));//sizeof(a[0][0])//a[0][0]表示二维数组的第一个元素,也就是数组中第一行第一列的元素//它是int类型,int类型占4字节,所以结果是 4printf("sizeof(a[0])         = %zu\n", sizeof(a[0]));//sizeof(a[0])//a[0]可以看作是二维数组第一行的一维数组名。//这一行有4个int类型的元素,所以这一行的大小是4 * 4 = 16 字节printf("sizeof(a[0] + 1)     = %zu\n", sizeof(a[0] + 1));//sizeof(a[0] + 1)//a[0]作为一维数组名,是指向第一行第一个元素的指针。//a[0] + 1就是将这个指针向后移动一个int类型的位置,指向第一行的第二个元素。//但它本质还是一个指针,在64位系统中指针大小通常是8字节,所以结果是8printf("sizeof(*(a[0] + 1))  = %zu\n", sizeof(*(a[0] + 1)));//sizeof(*(a[0] + 1))//*(a[0] + 1)是对a[0] + 1这个指针进行解引用操作,得到的是第一行的第二个元素。//它是int类型,所以大小是4字节printf("sizeof(a + 1)        = %zu\n", sizeof(a + 1));//sizeof(a + 1)//a作为二维数组名,在这里隐式转换为指向第一行的指针。//a + 1就是将这个指针向后移动一行(也就是4个int元素的位置),指向第二行。//它仍然是一个指针,所以大小是8字节(64位系统)printf("sizeof(*(a + 1))     = %zu\n", sizeof(*(a + 1)));//sizeof(*(a + 1))//*(a + 1)是对a + 1这个指针进行解引用操作,得到的是第二行的一维数组。//这一行有4个int类型的元素,所以大小是4 * 4 = 16字节printf("sizeof(&a[0] + 1)    = %zu\n", sizeof(&a[0] + 1));//sizeof(&a[0] + 1)//&a[0]是取第一行的地址,它是一个指向包含4个int元素的一维数组的指针。//&a[0] + 1就是将这个指针向后移动一行,指向第二行。//它还是一个指针,所以大小是8字节(64位系统)printf("sizeof(*(&a[0] + 1)) = %zu\n", sizeof(*(&a[0] + 1)));//sizeof(*(&a[0] + 1))//*(&a[0] + 1)是对&a[0] + 1这个指针进行解引用操作,得到的是第二行的一维数组。//这一行有4个int 类型的元素,所以大小是4 * 4 = 16字节printf("sizeof(*a)           = %zu\n", sizeof(*a));//sizeof(*a)//a为指向第一行的指针,*a就是对这个指针进行解引用操作,得到的是第一行的一维数组。//这一行有4个int类型的元素,所以大小是4 * 4 = 16字节printf("sizeof(a[3])         = %zu\n", sizeof(a[3]));//sizeof(a[3])//虽然数组a只有3行(索引从0到2),但sizeof是在编译时计算的//它只关心a[3]的类型,a[3]从类型上来说和a[0]、a[1]、a[2]一样//都是包含4个int元素的一维数组,所以大小是4 * 4 = 16字节return 0;
}

总 结

数 组 名 的 意 义

  • sizeof(数组名),这 里 的 数 组 名 表 示 整 个 数 组,计 算 的 是 整 个 数 组 的 大 小。
  • &数组名,这 里 的 数 组 名 表 示 整 个 数 组,取 出 的 是 整 个 数 组 的 地 址。
  • 除 此 之 外 所 有 的 数 组 名 都 表 示 首 元 素 的 地 址 。

在这里插入图片描述

总结

       至 此,关 于 C 语 言 指 针 的 探 索 暂 告 一 段 落,但 你 的 编 程 征 程 才 刚 刚 启 航。写 代 码 是 与 机 器 深 度 对 话,过 程 中 虽 会 在 语 法、算 法 困 境 里 挣 扎,但 这 些 磨 砺 加 深 了 对 代 码 的 理 解。愿 你 合 上 电 脑 后,灵 感 不 断,在 C 语 言 的 世 界 里 持 续 深 耕,书 写 属 于 自 己 的 编 程 传 奇,下 一 次 开 启 ,定 有 全 新 的 精 彩 等 待。小 编 期 待 重 逢,盼 下 次 阅 读 见 你 们 更 大 进 步,共 赴 代 码 之 约!

相关文章:

C 语 言 --- 指 针 4(习 题)

C 语 言 --- 指 针 4&#xff08;习 题&#xff09; sizeofstrlen整 型 数 组 - - - int a[ ]字 符 数 组 - - - char arr[ ]字 符 数 组 - - - char arr1[ ]字 符 串 常 量 指 针 - - - char arr[ ]二 维 数 组 - - - char arr[3][4]总结 &#x1f4bb;作 者 简 介&#xff1a…...

可发1区的超级创新思路(python 、MATLAB实现):基于区域注意力双通道MABMA的时间序列预测模型

首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 应用领域:功率预测、故障诊断、流量预测等领域! 目录 首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 应用领域:功率预测、故障诊断、流…...

可发1区的超级创新思路(python 、MATLAB实现):基于多尺度注意力TCN-KAN与小波变换的时间序列预测模型

一、数学模型与原理 1.1 小波变换多尺度分解 输入功率序列 x(t) 经小波变换分解为近似系数 Aj​ 与细节系数 Dj​: 1.2 多尺度TCN特征提取 对每个尺度子序列 {A3​,D3​,D2​,D1​} 采用独立TCN: 式中 ∗d​ 为扩张率 d=2l 的扩张卷积,Wd​ 为可学习参数。 1.3 多尺度注…...

PyTorch `flatten()` 和 `squeeze()` 区别

PyTorch flatten() 和 squeeze() 区别 在 PyTorch 里,flatten() 和 squeeze(0) 是两个不同的张量操作, 1. flatten() 方法 flatten() 方法用于把一个多维张量展开成一维张量。它会将张量里的所有元素按顺序排列成一个一维序列。 语法 torch.flatten(input, start_dim=...

使用Java基于Geotools的SLD文件编程式创建与磁盘生成实战

前言 在地理信息系统&#xff08;GIS&#xff09;领域&#xff0c;地图的可视化呈现至关重要&#xff0c;而样式定义语言&#xff08;SLD&#xff09;文件为地图元素的样式配置提供了强大的支持。SLD 能够精确地定义地图图层中各类要素&#xff08;如点、线、面、文本等&#x…...

opencv练习

1.创建一个 PyQt 应用程序&#xff0c;该应用程序能够&#xff1a; &#xff08;1&#xff09;使用 OpenCV 加载一张图像。 &#xff08;2&#xff09;在 PyQt 的窗口中显示这张图像。 &#xff08;3&#xff09;提供四个按钮&#xff08;QPushButton&#xff09;&#xff1…...

opencv--基础

opencv OpenCV是一个实现数字图像处理和计算机视觉通用算法的开源跨平台库。 链接 opencv中的cv是什么意思 在OpenCV中&#xff0c;"cv" 是 "Computer Vision"&#xff08;计算机视觉&#xff09; 的缩写。 opencv的实现语言 opencv的底层实现代码是使…...

基于模板匹配的信用卡号码识别系统

本项目实现了一个基于模板匹配的信用卡号码识别系统。 1. 导入库和设置参数 # -*- coding: utf-8 -*- # 导入工具包 from imutils import contours import numpy as np import argparse import cv2 import myutils import os# 设置参数 ap argparse.ArgumentParser() # 替换…...

Spring Boot中Excel处理完全指南

文章目录 1. Excel处理基础知识1.1 为什么需要在应用中处理Excel文件?1.2 Java中的Excel处理库介绍1.2.1 Apache POI1.2.2 EasyExcel1.2.3 JExcel1.2.4 Apache POI SXSSF1.3 Spring Boot中集成Excel处理2. 在Spring Boot中集成Excel处理库2.1 集成Apache POI2.1.1 添加依赖2.1…...

洛谷P1312 [NOIP 2011 提高组] Mayan 游戏

题目 #算法/进阶搜索 思路: 根据题意,我们可以知道,这题只能枚举,剪枝,因此,我们考虑如何枚举,剪枝. 首先,我们要定义下降函数down(),使得小木块右移时,能够下降到最低处,其次,我们还需要写出判断函数,判断矩阵内是否有小木块没被消除.另外,我们还需要消除函数,将矩阵内三个相连…...

c++ (异常)

1.异常的概念及使用 1.1异常的概念 异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理&#xff0c; 异常使得我们能够将问题的检测与解决问题的过程分开&#xff0c;程序的一部分负责检测问题的出现&#xff0c;然后 解决问题的任务传…...

MySQL如何实现行行比较

概述 在MySQL中实现行行比较通常涉及比较同一表或不同表中不同行的数据。以下是几种常见的方法及示例&#xff1a; 1. 自连接&#xff08;Self-Join&#xff09; 通过将表与自身连接&#xff0c;比较不同行的数据。 场景示例&#xff1a;比较同一用户相邻订单的金额差异。 …...

springboot2.X创建maven多模块工程

因为需要&#xff0c;所以付出。 好长时间没有搭建新的框架了&#xff0c;最近在搭建微服务的多模块maven工程&#xff0c;现在就将创建的过程记录下来&#xff0c;方便自学的小伙伴找寻资料&#xff0c;少走弯路。好了下面直接开干。 开发工具 &#xff1a;idea 、springboo…...

八股文---Redis(1)

目录 1.Redis-使用场景 1.我看你做的项目中&#xff0c;都用到了redis&#xff0c;你在最近的项目中哪些场景使用了redis呢&#xff1f; 2.缓存三兄弟可以我看我另一个文章&#xff08;穿透&#xff0c;雪崩&#xff0c;击穿&#xff09; 3.redis做为缓存&#xff0c;mysql…...

QT聊天项目DAY06

1.从git上同步项目 编译测试&#xff0c;编译通过 Post请求测试 测试成功 2. email is 打印有问题&#xff0c;检查 解析结果是存储在jsonResult中的&#xff0c;修改 3. 客户端实现Post验证码请求 3.1 同步Qt客户端项目 检查QT版本&#xff0c;由于我在公司用的还是QT5.12.9…...

python(八)-数据类型转换

#数据类型转换 #转换为整型int #字符串str--》整数int #纯数字的字符串可以转换&#xff0c;否则会报错 s 2025 n int(s) print(type(s),type(n)) print(n)#浮点数float--》整数int s1 2.23 print(int(s1))#bool-->整数int s2,s3 True,False print(int(s2),int(s3))#转…...

JavaScript 变量命名规范

在编写JavaScript代码时&#xff0c;遵循良好的变量命名规范对于提高代码的可读性、可维护性和协作效率至关重要。一个清晰且一致的命名习惯不仅有助于开发者自己理解代码&#xff0c;也能让其他团队成员更容易上手和维护项目。本文将详细介绍JavaScript中常见的变量命名规则和…...

2025年渗透测试面试题总结-拷打题库05(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年渗透测试面试题总结-拷打题库05 1. 病毒和蠕虫的区别 2. DNS欺骗&#xff08;DNS Spoofing&…...

【排队论】Probabilistic Forecasts of Bike-Sharing Systems for Journey Planning

Probabilistic Forecasts of Bike-Sharing Systems forJourney Planning abstract 我们研究了对共享单车系统&#xff08;BSS&#xff09;车站未来自行车可用性进行预测的问题。这是相关的&#xff0c;以便提出建议&#xff0c;保证用户能够进行旅行的概率足够高。为此&#x…...

Redis 的持久化机制(RDB, AOF)对微服务的数据一致性和恢复性有何影响?如何选择?

Redis 的持久化机制&#xff08;RDB 和 AOF&#xff09;对于保证 Redis 服务重启或崩溃后数据的恢复至关重要&#xff0c;这直接影响到依赖 Redis 的微服务的数据一致性和恢复能力。 1. RDB (Redis Database Backup) 机制: 在指定的时间间隔内&#xff0c;将 Redis 在内存中的…...

手撕LLM(四):从源码出发,探索大模型的预训练(pretrain)过程

前面我们基于Minimind项目介绍了大模型的推理、LoRa加载、Moe结构&#xff0c; 大家对大模型的整体结构应该有一个比较清晰的认识&#xff1b;从该篇博客开始&#xff0c;我们通过代码剖析大模型的训练过程&#xff0c;今天的主题是大模型的预训练。 那大模型的预训练是一个什么…...

Linux系统:进程终止的概念与相关接口函数(_exit,exit,atexit)

本节目标 理解进程终止的概念理解退出状态码的概念以及使用方法掌握_exit与exit函数的用法以及区别atexit函数注册终止时执行的函数相关宏 一、进程终止 进程终止&#xff08;Process Termination&#xff09;是指操作系统结束一个进程的执行&#xff0c;回收其占用的资源&a…...

keil5 µVision 升级为V5.40.0.0:增加了对STM32CubeMX作为全局生成器的支持,主要有哪些好处?

在Keil5 μVision V5.40.0.0版本中,增加了对STM32CubeMX作为全局生成器的支持,这一更新主要带来了以下三方面的提升: 开发流程整合STM32CubeMX原本就支持生成Keil项目代码,但新版本将这一集成升级为“全局生成器”级别,意味着STM32CubeMX生成的代码能直接成为Keil项目的核…...

C 语言联合与枚举:自定义类型的核心解析

上篇博客中&#xff0c;我们通过学习了解了C语言中一种自定义类型结构体的相关知识&#xff0c;那么该语言中是否还拥有相似的自定义类型呢&#xff1f;这将是我们今天学习的目标。 1.联合体 联合体其实跟结构体类似&#xff0c;也是由一个或多个成员构成&#xff0c;这些成员…...

P1113 杂务-拓扑排序

拓扑排序 P1113 杂务 题目来源-洛谷 题意 求出完成所有任务的最短时间 思路 要求完成所有任务的最短时间&#xff0c;即每个任务尽可能最短&#xff0c;所以再求完成所有任务中的最大值&#xff08;需要最长时间的任务都完成了才叫全部完成&#xff09; 问题化解&#xf…...

Flink介绍——实时计算核心论文之Kafka论文总结

引入 大数据系统中的数据来源 在开始深入探讨Kafka之前&#xff0c;我们得先搞清楚一个问题&#xff1a;大数据系统中的数据究竟是从哪里来的呢&#xff1f;其实&#xff0c;这些数据大部分都是由各种应用系统或者业务系统产生的“日志”。 比如&#xff0c;互联网公司的广告…...

模拟投资大师思维:AI对冲基金开源项目详解

这里写目录标题 引言项目概述核心功能详解多样化的AI投资智能体灵活的运行模式透明的决策过程 安装和使用教程环境要求安装步骤基本使用方法运行对冲基金模式运行回测模式 应用场景和实际价值教育和研究价值潜在的商业应用与现有解决方案的对比局限性与发展方向 结论 引言 随着…...

DAY4:数据库对象与高级查询深度解析:从视图到多表关联实战

一、数据库对象精要指南 1.1 视图&#xff08;View&#xff09;的进阶应用 视图是存储在数据库中的虚拟表&#xff0c;本质是预编译的SQL查询语句。通过视图可以简化复杂查询、实现数据安全隔离、保持业务逻辑一致性。 创建语法示例&#xff1a; CREATE VIEW sales_summary…...

【Matlab】中国东海阴影立体感地图

【Matlab】中国东海阴影立体感地图 【Matlab】中国东海阴影立体感地图 【Matlab】中国东海阴影图立体感画法 以前分享过一次&#xff0c;链接如下&#xff1a; 中国海域地形图 但是以前还是有些小问题&#xff0c;这次修改了。 另外&#xff0c;增加了新的画法&#xff1a; 另…...

python文件类操作:json/ini配置文件、logging日志统计、excel表格数据读写、os操作库

文章目录 一、with open文件操作二、csv表格数据读写三、Excel表格数据读写四、json配置文件读写五、ini配置文件读写六、logging日志统计七、os操作库&#xff08;文件拼接、创建、判断等&#xff09; 打开文件使用不同参数有着不同的含义&#xff0c;比如只读、只写、二进制读…...

VSCode安装与环境配置(Mac环境)

20250419 - 概述 大概是非常久之前了&#xff0c;装了VSCode&#xff0c;估计都得21的时候了&#xff0c;电脑上也没更新过。当时安装也直接装上就完事了。这次把版本更新一下&#xff0c;同时记录一下这个安装过程。 安装 mac下安装非常简单&#xff0c;直接从官网下载&am…...

【信息系统项目管理师】高分论文:论信息系统项目的采购管理(“营业工单系统”项目)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 论文1、规划采购管理2、实施采购3、控制采购论文 2018年1月,我参加了 XX运营商集团公司某省分公司的“营业工单系统”的信息化建设项目,我有幸担任项目经理。该项目投资1000万元人民币,建设工期为12个月。该…...

XCVU13P-2FHGA2104I Xilinx Virtex UltraScale+ FPGA

XCVU13P-2FHGA2104I 是 Xilinx&#xff08;现为 AMD&#xff09;Virtex UltraScale™ FPGA 系列中的高端 Premium 器件&#xff0c;基于 16nm FinFET 工艺并采用 3D IC 堆叠硅互连&#xff08;SSI&#xff09;技术&#xff0c;提供业内顶级的计算密度和带宽​。该芯片集成约 3,…...

@Validated与@Valid的正确使用姿势

验证代码 Validated RestController public class A {PostMappingpublic void test(Min(value 1) Integer count) {} // 校验规则生效 }RestController public class A {PostMappingpublic void test(Validated Min(value 1) Integer count) {} // 校验规则不生效 }RestCont…...

Ubuntu20.04下Docker方案实现多平台SDK编译

0 前言 熟悉嵌入式平台Linux SDK编译流程的小伙伴都知道,假如平台a要求必须在Ubuntu18.04下编译,平台b要求要Ubuntu22.04的环境,那我只有Ubuntu20.04,或者说我的电脑硬件配置最高只能支持Ubuntu20.04怎么办?强行在Ubuntu20.04下编译,编又编不过,换到旧版本我又不愿意,…...

树莓派超全系列教程文档--(34)树莓派配置GPIO

配置GPIO GPIO控制gpio 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 GPIO控制 gpio 通过 gpio 指令&#xff0c;可以在启动时将 GPIO 引脚设置为特定模式和值&#xff0c;而以前需要自定义 dt-blob.bin 文件。每一行都对一组引脚应用相同的设…...

C语言 数组(下)

目录 1.二维数组的创建 2.二位数组的初始化 3.二维数组的使用 4.二维数组在内存中的储存 1.二维数组的创建 1.1二维数组的概念 前面学习的数组被称为一维数组&#xff0c;数组的元素都是内置类型的&#xff0c;如果我们把一维数组做为数组的元 素&#xff0c;这时候就是…...

opencv图像旋转(单点旋转的原理)

首先我们以最简单的一个点的旋转为例子&#xff0c;且以最简单的情况举例&#xff0c;令旋转中心为坐标系中心O&#xff08;0&#xff0c;0&#xff09;&#xff0c;假设有一点P_{0}(x_{0},y_{0})&#xff0c;P_{0}离旋转中心O的距离为r&#xff0c;OP_{0}与坐标轴x轴的夹角为\…...

针对MCP认证考试中的常见技术难题进行实战分析与解决方案分享

一、身份与权限管理类难题 场景1&#xff1a;Active Directory组策略&#xff08;GPO&#xff09;不生效 问题现象&#xff1a;客户端计算机未应用新建的组策略。排查步骤&#xff1a; 检查GPO链接顺序&#xff1a;使用gpresult /r查看策略优先级&#xff0c;确保目标OU的GPO…...

systemctl管理指令

今天我们来继续学习服务管理指令,接下来才是重头戏-systemctl,那么话不多说,直接开始吧. systemctl管理指令 1.基本语法: systemctl [start | stop | restart | status]服务 注&#xff1a;systemctl指令管理的服务在/usr/lib/ systemd/system查看 2.systemctl设置服务的自…...

DataWhale AI春训营 问题汇总

1.没用下载训练集导致出错&#xff0c;爆错如下。 这个时候需要去比赛官网下载对应的初赛训练集 unzip -d /mnt/workspace/sais_third_new_energy_baseline/data /mnt/workspace/sais_third_new_energy_baseline/初赛训练集.zip 在命令行执行这个命令解压 2.没定义测试集 te…...

当算力遇上马拉松:一场科技与肉身的极限碰撞

目录 一、从"肉身苦修"到"科技修仙" 二、马拉松的"新大陆战争" 三、肉身会被算法"优化"吗? 马拉松的下一站是"人机共生"时代 当AI能预测你的马拉松成绩,算法能规划最佳补给方案,智能装备让训练效率翻倍——你还会用传…...

n8n 中文系列教程_02. 自动化平台深度解析:核心优势与场景适配指南

在低代码与AI技术深度融合的今天&#xff0c;n8n作为开源自动化平台正成为开发者提效的新利器。本文深度剖析其四大核心技术优势——极简部署、服务集成、AI工作流与混合开发模式&#xff0c;并基于真实场景测试数据&#xff0c;厘清其在C端高并发、多媒体处理等场景的边界。 一…...

Macvlan 网络类型详解:特点、优势与局限性

一、Macvlan 网络类型的基本概念 1. 什么是 Macvlan Macvlan 是 Linux 内核提供的一种网络虚拟化技术&#xff0c;允许在单个物理接口&#xff08;例如 enp0s3&#xff09;上创建多个虚拟网络接口。每个虚拟接口拥有独立的 MAC 地址&#xff0c;表现得像物理网络中的独立设备…...

tigase源码学习杂记-AbstractMessageReceiver

前言 废话&#xff0c;最近把工作中用的基于XMPP协议的经典开源框架又读了一遍&#xff0c;整理一下其优秀的源码学习记录。 概述 AbstractMessageReceiver是tigase核心组件MessageRouter、SessionManager的抽象父类&#xff0c;是tigase消息接收器的抽象。AbstractMessageR…...

C#.net core部署IIS

Windows IIS 部署 .NET 应用详细指南 本文档提供了在 Windows Server 上使用 IIS 部署 .NET 应用&#xff08;包括 .NET Core 和传统 WebForms&#xff09;的完整步骤和最佳实践。 目录 概述环境准备.NET Core 应用部署 应用准备发布应用在 IIS 中配置应用池配置高级配置 .N…...

sql学习

Name 列中选取唯一不同的值 插入 更新 删除 筛选固定的行数 模糊查询 包含 范围 name的别名是n 两个表交集 左边包含全部 右边包含全部 重复的展示一条 重复的都会展示 创建一个新表&#xff0c;把字段复制近期 创建数据库 约束 创建索引 删除 函数 聚合函数...

OSPF实验

实验要求&#xff1a; 1.R5为ISP&#xff0c;其上只能配置IP地址&#xff1b;R4作为企业边界路由器&#xff0c; 出口公网地址需要通过PPP协议获取&#xff0c;并进行chap认证 &#xff08;上面这个不会做&#xff09; 2.整个OSPF环境IP基于172.16.0.0/16划分&#xff1b; 3.所…...

洛谷题目:P8624 [蓝桥杯 2015 省 AB] 垒骰子 题解 (本题简)

题目传送门: P8624 [蓝桥杯 2015 省 AB] 垒骰子 - 洛谷 (luogu.com.cn) 前言: 这道题要求我们计算将 个骰子垒成柱体且满足某些面不能紧贴的不同垒骰字方式的数量,并且结果需要对 取模。下面小亦来带大家逐步分析解题思路: #基本概念理解: 1、骰子特性: 一直骰子的…...

简单线段树的讲解(一点点的心得体会)

目录 一、初识线段树 图例&#xff1a; ​编辑 数组存储&#xff1a; 指针存储&#xff1a; 理由&#xff1a; build函数建树 二、线段树的区间修改维护 区间修改维护&#xff1a; 区间修改的操作&#xff1a; 递归更新过程&#xff1a; 区间修改update&#xff1a…...