高级语言程序设计课程第七次个人作业

这个作业属于哪个课程 2024高级语言程序设计 (福州大学 - 计算机与大数据学院)
这个作业要求在哪里 高级语言程序设计课程第七次个人作业
学号 052205124
姓名 林宇

作业内容:

image
问题:不懂如何将指针指向二维数组以及使用二维数组的指针
解决:((array + i) + j)就可以访问二维数组的值
2.
image
3.
image
4.
int a; 一个整型变量
int * a; 一个指向整型的指针
int * * a; 一个指向指针的指针,它最终指向整型数据
int a[10]; 一个大小为10的整型数组
int (*a)[10]; 一个指向包含10个整型元素的数组的指针
5.
image
6.
image
7.
image

各个输出内容及其解释:
(1)sizeof(a):
输出: 48
解释: a 是一个二维数组,a[3][4] 表示数组有 3 行 4 列,每个 int 占 4 字节(假设 int 是 4 字节),所以总的大小是 3 × 4 × 4 = 48 字节。

(2)sizeof(a[0][0]):
输出: 4
解释: a[0][0] 是二维数组中的一个单独元素,它是一个 int 类型,假设 int 占 4 字节,因此输出 4。

(3)sizeof(a[0]):
输出: 16
解释: a[0] 是二维数组的第一行,即一个 int[4] 类型的数组,包含 4 个 int 类型元素,每个元素占 4 字节。所以 sizeof(a[0]) 等于 4 × 4 = 16 字节。

(4)sizeof(a[0] + 1):
输出: 4
解释: a[0] + 1 是 a[0] 数组的第二个元素的地址,即 a[0][1] 的地址。数组的元素是 int 类型,因此 sizeof(a[0] + 1) 返回的是 int * 指针的大小,假设 int * 占 4 字节,因此输出 4。

(5) sizeof( * (a[0] + 1)):
输出: 4
解释: a[0] + 1 是 a[0] 数组的第二个元素的地址,*(a[0] + 1) 取的是该元素的值,即 a[0][1]。a[0][1] 是一个 int 类型,因此输出的是 int 类型的大小,假设 int 占 4 字节,所以输出 4。

(6)sizeof(a + 1):
输出: 4
解释: a + 1 是 a 数组的第二行的地址,即 &a[1]。a 是一个 int[3][4] 类型的数组,a 其实是一个指向整个二维数组的指针。a + 1 的类型是 int[4] *(指向数组的指针),它的大小是 int * 指针的大小,即 4 字节。

(7)sizeof( * (a + 1)):
输出: 16
解释: a + 1 是 a 数组的第二行的地址,即 &a[1]。(a + 1) 取的是二维数组的第二行,也就是 a[1]。a[1] 是一个 int[4] 类型的数组,包含 4 个 int 元素,每个元素占 4 字节,所以 sizeof((a + 1)) 的结果是 4 × 4 = 16 字节。

(8)sizeof(&a[0] + 1):
输出: 4
解释: &a[0] 是 a 数组的第一行的地址,即 a 的第一个元素的地址(a[0])。&a[0] + 1 是第二行的地址,即 a + 1,它的类型是 int()[4](指向包含 4 个 int 的数组的指针),sizeof(&a[0] + 1) 返回的是 int()[4] 类型指针的大小,即 4 字节。

(9)sizeof((&a[0] + 1)):
输出: 16
解释: &a[0] + 1 是 a 数组的第二行的地址,即 a + 1,
(&a[0] + 1) 解引用后得到的是 a[1],它是一个 int[4] 类型的数组,包含 4 个 int 元素,每个元素占 4 字节,因此结果是 4 × 4 = 16 字节。

(10)sizeof(a):
输出: 16
解释: a 是一个 int[3][4] 类型的二维数组,
a 解引用后得到的是 a[0],即第一行,它是一个 int[4] 类型的数组,包含 4 个 int 元素,每个元素占 4 字节,所以结果是 4 × 4 = 16 字节。

(11)sizeof(a[3]):
输出: 16
解释: a[3] 访问的是二维数组的第 4 行(由于索引从 0 开始),但是 a 只有 3 行,因此这实际上是一个越界访问。编译器会返回 16 字节,因为 a[3] 被视为一个 int[4] 类型的数组,大小为 4 × 4 = 16 字节。尽管这是越界访问,但编译器的 sizeof 运算符并不会触及到内存中的数据,而是根据 a[3] 的声明类型计算出大小。

问题:发现我的答案和其他人的有些出入
解决:应该是编译器中指针大小的差异,我的是指针大小是4,有些人的是8

image
问题:遇到输入空格或者输入的字符数过多的话,scanf读不了或缓冲区溢出
解决:使用fgets

总结与思考:

很好的作业,让我对c语言有了更深刻的理解

后台博文编辑页面截图:image

posted @ 2024-11-17 17:23  AW111  阅读(1)  评论(0编辑  收藏  举报