当前位置:网站首页>指针和数组笔试题解析
指针和数组笔试题解析
2022-07-06 07:58:00 【拾至灬名瑰】
前言
大家好久不见哇!!!最近由于学校的考试,也没有更新博客,直到这两天才把学校的考试解决完,哈哈哈哈哈哈,已经迫不及待的给大家讲解啦!!!
今天我给大家讲讲关于数组和指针的面试题,内容可能会有些难度,有不会的知识点可以参考
还有一点本主机为32位环境,所以指针默认大小为4个字节!!!
一、指针和数组笔试题解析
1.一维数组
int main() {
int a[] = {
1,2,3,4 };
//sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小,单位是字节
printf("%d\n", sizeof(a));//16
//a不是单独放在sizeof内部,也没有取地址,所以a就是首元素地址,a+0还是首元素的地址
printf("%d\n", sizeof(a + 0));//4/8
//*a中的a是数组首元素的地址,*a就是对首元素的地址解引用,找到的就是首元素
//首元素的大小就是4个字节
printf("%d\n", sizeof(*a));//4
//这里a数组首元素的地址
//a+1是第二个元素的地址
//sizeof(a+1)就是地址的大小
printf("%d\n", sizeof(a + 1));//4/8
//计算的是第二个元素的大小
printf("%d\n", sizeof(a[1]));//4
//&a取出的数组的地址,数组的地址,也就是个地址
printf("%d\n", sizeof(&a));//4/8
//&a------>int(*)[4]
// &a拿到的是数组名的地址,类型是int(*)[4],是一组数组指针
//数组指针解引用相当于访问一个数组
// &*a---->a
//2.
//*和&抵消了 相当于sizeof(a)
printf("%d\n", sizeof(*&a));//16
//&a-->取出的是数组的指针
//&a-->int(*)[4]
//&a+1 是从数组a的地址向后跳过了一个(4个整形元素的)数组的大小
//&a+1还是地址,是地址就是4个字节
printf("%d\n", sizeof(&a + 1));//4/8
//&a[0]就是第一个元素的地址
//计算的是地址的大小
printf("%d\n", sizeof(&a[0]));//4/8
//&a[0]+1就是第二个元素的地址
//计算的是地址的大小
//&a[0]+1---->&a[1]
printf("%d\n", sizeof(&a[0] + 1));//4/8
return 0;
}
2.字符数组
int main() {
char arr[] = {
'a','b','c','d','e','f' };
//sizeof(数组名)
printf("%d\n", sizeof(arr));//6
//arr+0是数组首元素的地址
printf("%d\n", sizeof(arr + 0));//4/8
//*arr就是数组的首元素,大小是一个字节
//*arr--->arr[0]
//*(arr+0)---->arr[0]
printf("%d\n", sizeof(*arr));//1
//*arr就是数组的第二个元素,大小是一个字节
printf("%d\n", sizeof(arr[1]));//1
//&arr是数组的地址,是地址就是4/8个字节
printf("%d\n", sizeof(&arr));//4/8
//&arr + 1是数组后的地址
printf("%d\n", sizeof(&arr + 1));//4/8
//(&arr[0] + 1)就是数组的第二个元素,大小是一个字节
printf("%d\n", sizeof(&arr[0] + 1));//4/8
printf("%d\n", strlen(arr));//随机值
printf("%d\n", strlen(arr + 0));//随机值
//printf("%d\n", strlen(*arr));//--->strlen('a');--->strlen(97);//野指针
有问题
--->strlen('b');--->strlen(98);//野指针
//printf("%d\n", strlen(arr[1]));
printf("%d\n", strlen(&arr));//随机值
printf("%d\n", strlen(&arr + 1));//随机值-6
printf("%d\n", strlen(&arr[0] + 1));//随机值-1
return 0;
}
int main() {
char arr[] = "abcdef";
printf("%d\n", sizeof(arr));//7
printf("%d\n", sizeof(arr + 0));//4/8
printf("%d\n", sizeof(*arr));//1
printf("%d\n", sizeof(arr[1]));//1
printf("%d\n", sizeof(&arr));//4/8
printf("%d\n", sizeof(&arr + 1));//4/8
printf("%d\n", sizeof(&arr[0] + 1));//4/8
//strlen是求字符串长度的,关注的是字符串中的\0,计算的是\0之前出现的字符的个数
//strlen是库函数,只针对字符串
//sizeof只关注占用内存空间的大小,不在乎内存中放的是什么
//sizeof是操作符
printf("%d\n", strlen(arr));//6
printf("%d\n", strlen(arr + 0));//6
有问题
//printf("%d\n", strlen(*arr));
//printf("%d\n", strlen(arr[1]));
//
printf("%d\n", strlen(&arr));//6
printf("%d\n", strlen(&arr + 1));//随机值
printf("%d\n", strlen(&arr[0] + 1));//5
return 0;
}
3.二维数组
int main() {
//二维数组
int a[3][4] = {
0 };
printf("%d\n", sizeof(a));//48
printf("%d\n", sizeof(a[0][0]));//4
//a[0]是第一行这一个一维数组的数组名,单独放在sizeof内部,a[0]表示第一个整个这个一维数组
//sizeof(a[0])计算的是这一行的大小
printf("%d\n", sizeof(a[0]));//16
//(a[0] + 1)--->&a[0][0]+1
//a[0]并没有单独放在sizeof内部,也没取地址
//a[0]就表示首元素的地址,就是第一行这个一维数组的第一个元素的地址
//a[0]+1就是第一行第二个元素的地址
printf("%d\n", sizeof(a[0] + 1));//4/8
printf("%d\n", sizeof(*(a[0] + 1)));//4
//a虽然是二维数组的地址,但是并没有单独放在sizeof内部,也没取地址
//a表示首元素的地址,二维数组的首元素是他的第一行,a就是第一行的地址
//a+1就是跳过第一行,表示第二行的地址
printf("%d\n", sizeof(a + 1));//4/8
//*(a + 1)是对第二行地址的解引用,拿到的是第二行
//*(a+1)--->a[1]
//sizeof(*(a+1))--->sizeof(a[1])
printf("%d\n", sizeof(*(a + 1)));//16
//&a[0]--对第一行的数组名取地址,哪出的是第一行的地址
//&a[0]+1--得到的是第二行的地址
printf("%d\n", sizeof(&a[0] + 1));//4/8
printf("%d\n", sizeof(*(&a[0] + 1)));//16
//a表示首元素的地址,就是第一行的地址
//*a就是对第一行地址的解引用,拿到的就是一行
printf("%d\n", sizeof(*a));//16
printf("%d\n", sizeof(a[3]));//16
return 0;
}
总结:
数组名的意义:
- sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。
- &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。
- 除此之外所有的数组名都表示首元素的地址。
二、指针笔试题
1.面试题1
int main()
{
int a[5] = {
1, 2, 3, 4, 5 };
int* ptr = (int*)(&a + 1);//&a的类型是 int(*)[5],所以需要强制类型转化为int*
printf("%d,%d", *(a + 1), *(ptr - 1));
return 0;
}
//程序的结果是什么?
2.面试题2
//由于还没学习结构体,这里告知结构体的大小是20个字节
struct Test
{
int Num;
char* pcName;
short sDate;
char cha[2];
short sBa[4];
}*p= (struct Test*)0x100000;
//假设p 的值为0x100000。 如下表表达式的值分别为多少?
//已知,结构体Test类型的变量大小是20个字节
int main()
{
printf("%p\n", p + 0x1);//0x00100014
//0x100000+20--->//0x100014
printf("%p\n", (unsigned long)p + 0x1);//0x00100001
//1,048,576+1--->1,048,577
//0x100001
printf("%p\n", (unsigned int*)p + 0x1);//0x00100004
//0x100000+4--->//0x100004
return 0;
}
3.面试题3
int main()
{
int a[4] = {
1, 2, 3, 4 };
int* ptr1 = (int*)(&a + 1);
int* ptr2 = (int*)((int)a + 1);
printf("%x,%x", ptr1[-1], *ptr2);
return 0;
}
4.面试题4
int main()
{
int a[3][2] = {
(0, 1), (2, 3), (4, 5) };
int* p;
p = a[0];//a[0]是第一行的数组名
//a[0]表示首元素的地址,即a[0][0]的地址,&a[0][0]
printf("%d", p[0]);
return 0;
}
5.面试题5
int main()
{
int a[5][5];
int(*p)[4];
p = a;
printf("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);//-4 -4
//地址相减的值是中间元素的个数
return 0;
}
6.面试题6
int main()
{
int aa[2][5] = {
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int* ptr1 = (int*)(&aa + 1);
int* ptr2 = (int*)(*(aa + 1));
printf("%d,%d", *(ptr1 - 1), *(ptr2 - 1));
return 0;
}
7.面试题7
int main()
{
char* a[] = {
"work","at","alibaba" };
char** pa = a;
pa++;
printf("%s\n", *pa);
return 0;
}
8.面试题8
int main()
{
char* c[] = {
"ENTER","NEW","POINT","FIRST" };
char** cp[] = {
c + 3,c + 2,c + 1,c };
char*** cpp = cp;
printf("%s\n", **++cpp);//point
printf("%s\n", *-- * ++cpp + 3);//er
printf("%s\n", *cpp[-2] + 3);// st
printf("%s\n", cpp[-1][-1] + 1);//ew
return 0;
}
在这里要注意的是++cpp是将cpp的地址改变了
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了关于数组和指针的面试题解析,本次文章内容有点多,需要大家慢慢理解,大家有不懂可以私聊我哦!!!
边栏推荐
- Hackathon ifm
- Nft智能合约发行,盲盒,公开发售技术实战--拼图篇
- Pangolin Library: control panel, control components, shortcut key settings
- Data governance: metadata management
- Common functions for PHP to process strings
- C # display the list control, select the file to obtain the file path and filter the file extension, and RichTextBox displays the data
- xpath中的position()函数使用
- wincc7.5下载安装教程(Win10系统)
- "Designer universe" APEC design +: the list of winners of the Paris Design Award in France was recently announced. The winners of "Changsha world center Damei mansion" were awarded by the national eco
- (lightoj - 1410) consistent verbs (thinking)
猜你喜欢
Wireshark grabs packets to understand its word TCP segment
Asia Pacific Financial Media | designer universe | Guangdong responds to the opinions of the national development and Reform Commission. Primary school students incarnate as small community designers
链表面试题(图文详解)
"Designer universe" Guangdong responds to the opinions of the national development and Reform Commission. Primary school students incarnate as small community designers | national economic and Informa
Risk planning and identification of Oracle project management system
[nonlinear control theory]9_ A series of lectures on nonlinear control theory
Codeforces Global Round 19(A~D)
"Designer universe" APEC design +: the list of winners of the Paris Design Award in France was recently announced. The winners of "Changsha world center Damei mansion" were awarded by the national eco
[Yugong series] February 2022 U3D full stack class 011 unity section 1 mind map
opencv学习笔记九--背景建模+光流估计
随机推荐
The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
"Designer universe": "benefit dimension" APEC public welfare + 2022 the latest slogan and the new platform will be launched soon | Asia Pacific Financial Media
"Friendship and righteousness" of the center for national economy and information technology: China's friendship wine - the "unparalleled loyalty and righteousness" of the solidarity group released th
C # create database connection object SQLite database
Get the path of edge browser
Document 2 Feb 12 16:54
Description of octomap averagenodecolor function
[Yugong series] February 2022 U3D full stack class 011 unity section 1 mind map
数据治理:误区梳理篇
The State Economic Information Center "APEC industry +" Western Silicon Valley will invest 2trillion yuan in Chengdu Chongqing economic circle, which will surpass the observation of Shanghai | stable
Hackathon ifm
Yu Xia looks at win system kernel -- message mechanism
ROS learning (IX): referencing custom message types in header files
C intercept string
[computer skills]
[t31zl intelligent video application processor data]
"Designer universe" APEC design +: the list of winners of the Paris Design Award in France was recently announced. The winners of "Changsha world center Damei mansion" were awarded by the national eco
24. Query table data (basic)
【Redis】NoSQL数据库和redis简介
Cf1036c class numbers solution