C进阶 :征服指针之指针与数组强化笔试题练习(1)(下)

简介: C进阶 :征服指针之指针与数组强化笔试题练习(1)(下)

答案:4/8

32位机器打印结果:

T3.

1. 
2. char arr[] = "abcdef";
3. 1.    printf("%d\n", sizeof(arr));
4. 2.    printf("%d\n", sizeof(arr+0));
5. 3.    printf("%d\n", sizeof(*arr));
6. 4.    printf("%d\n", sizeof(arr[1]));
7. 5.    printf("%d\n", sizeof(&arr));
8. 6.    printf("%d\n", sizeof(&arr+1));
9. 7.    printf("%d\n", sizeof(&arr[0]+1));

注意:这个数组里存的是一个字符串,所以数组里的元素是这样的:

Q1:

只有单独一个数组名,所以计算的是整个数组的大小;

答案:7

Q2:

arr+0 表示数组首元素的地址;

答案:4/8

Q3:

*arr 表示数组首元素,类型为 char ;

答案:1

Q4:

arr[1] 表示数组下标为1的元素,类型为 char

答案:1

Q5,Q6,Q7 :

都表示的是地址,所以:

答案:4/8

32位机器打印结果:

T4.

1. 
2. 
3. char *p = "abcdef";
4. 1.    printf("%d\n", sizeof(p));
5. 2.    printf("%d\n", sizeof(p+1));
6. 3.    printf("%d\n", sizeof(*p));
7. 4.    printf("%d\n", sizeof(p[0]));
8. 5.    printf("%d\n", sizeof(&p));
9. 6.    printf("%d\n", sizeof(&p+1));
10. 7.    printf("%d\n", sizeof(&p[0]+1));

这题是把常量字符串的首元素地址赋给了指针变量 p ,所以p也有一个地址 :

Q1:

p 是字符串首元素的地址,是地址 那么计算结果为4或8;

答案:4/8

Q2:

仍为地址;

答案:4/8

Q3,Q4:

*p和怕 p[0]  表示 字符串首元素,类型为 char

答案:1

补充:

 

Q5,Q6,Q7:

都表示的是地址,所以答案毋庸置疑,为4或是8;

&p :p 的地址;

&p+1 : 跳过 p 的地址的大小,以32位机器为例,跳过 4 个字节;

&p[0]+1:字符串中 元素 ’ b ' 的地址, 也可以写成 &p[1] ,二者相等;

答案:4/8

32位机器打印结果:

T5.

1. 
2. //二维数组
3. int a[3][4] = {0};
4. 1.     printf("%d\n",sizeof(a));
5. 2.     printf("%d\n",sizeof(a[0][0]));
6. 3.     printf("%d\n",sizeof(a[0]));
7. 4.     printf("%d\n",sizeof(a[0]+1));
8. 5.     printf("%d\n",sizeof(*(a[0]+1)));
9. 6.     printf("%d\n",sizeof(a+1));
10. 7.     printf("%d\n",sizeof(*(a+1)));
11. 8.     printf("%d\n",sizeof(&a[0]+1));
12. 9.     printf("%d\n",sizeof(*(&a[0]+1)));
13. 10.    printf("%d\n",sizeof(*a));
14. 11.    printf("%d\n",sizeof(a[3]));

Q1:

单独的数组名在 sizeof 内部,计算整个数组的大小,该数组有12个元素,每个元素的类型是 int ,所以 4 x 12=48;

答案:48

Q2:

a[0][0] :即数组第一个元素,类型为 int ;

答案:4

Q3:

由上图可知,在二维数组 arr[3][4] 中,arr[0],arr[1],arr[2],都可以看成是数组名,单独的数组名在sizeof 内部,计算的是整个数组的大小,arr[0] 数组由4个元素,每个元素类型为 int ,所以

4 x 4=16;

答案:16

Q4:

arr[0] 是第1行数组的首元素地址,+1,表示 arr[0][1] 的地址,所以计算结果为4或8;

答案:4/8

Q5

* (a[0]+1)  得到 a[0][1],元素类型为 int ;

答案:4

Q6:

数组名 a 即二维数组的首元素地址,二维数组首元素地址为第一行的地址,a+1 即二维数组第二行的地址,因为是地址,所以结果为4或8;

答案:4/8

Q7:

a+1=a[1]  ,*(a+1) 相当于对数组a[1]的地址解引用,即计算的是一维数组  a[1] 或是二维数组第二行的大小 ,所以是 16;

答案:16

Q8:

取出二维数组第1行的地址加1即第2行的地址,还是个地址;

答案:4/8

Q9:

对第2行的数组解引用,计算 一维数组 a[1] 的 整个大小;

答案:16

Q10:

此时数组名是数组首元素的地址,解引用找到第一行 的所有元素;

答案:16

Q11:

一眼看过去,a[3] 数组不是越界了吗,所以这是条错误的语句?

其实不是,这题是可以正常运行的,前面讲过,表达式有两种属性,一个是值属性,一个是类属性,而sizeof 计算的是表达式的类属性,所以它不会计算 a[3] ,只会计算 a[3] 类型所占的字节数,通过上文,我们很清楚,这个类型的字节数是 16;

答案:16

32位机器打印结果:

       🐼关于 sizeof 的题目讲到这里了,如有错误或是建议,欢迎小伙伴们提出,关于 strlen 函数的题目 将在下一篇文章中出现。🐰

      😽 如果想要了解更多的话,希望能三连支持支持博主啊,你们的支持对我很重要。😸😸

      🦖🦄 谢谢你的阅读。🐋🦝


目录
相关文章
|
2月前
使用指针访问数组元素
【10月更文挑战第30天】使用指针访问数组元素。
40 3
|
2月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
2月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
2月前
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。
|
2月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
61 4
|
2月前
使用指针访问数组元素
【10月更文挑战第31天】使用指针访问数组元素。
53 2
|
2月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
161 13
|
3月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
41 0
|
4月前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
160 4