当前位置:网站首页>Dachang classic pointer written test questions
Dachang classic pointer written test questions
2022-07-07 20:19:00 【On the Pearl River】
This part is the classic pointer question , Practice hard , If you refuse, you will , As soon as I write fei
Catalog :
Pointer classic question
1. This topic is the epitome of classic pointer pen test questions
2. drawing 、 drawing 、 drawing
3. Classic questions :
Classic questions :
Pen test 1:

Particular attention :
①int* ptr = (int*)(&a + 1);
//&a It takes out the address of the entire array , therefore &a The type is int(*)[5], This type of +-1 What I'm skipping is 5 individual int type
// Cast , The type changes , And the value remains the same
②printf("%d,%d", *(a + 1), *(ptr - 1));
//*(ptr-1) Why just skip 1 individual int type , because ptr The type is int*, This type of +-1 skip 1 individual int type
if int* p=&a;* explain p It's a pointer variable ,int explain p The object is int type .p The type is int*
Answer to this question :2,5
The code is as follows :
#include <stdio.h>
int main()
{
int a[5] = { 1,2,3,4,5 };
int* ptr = (int*)(&a + 1);
printf("%d,%d", *(a + 1), *(ptr - 1));
return 0;
}Pen test 2:

Particular attention :
there 0x1 It's hexadecimal , Convert to decimal to 1
It is known that p The value of is 0x100000,
①printf("%p\n", p + 0x1);
//p Is a structure type pointer variable ,p+-1 It means skipping a structure type size
if p Is an integer pointer variable ,p+-1 It means skipping an integer size
②printf("%p\n", (unsigned long)p + 0x1);
(unsigned long)p,p The type of changes but the value does not change ,
p The value of is 0x100000, convert to unsigned int Type followed by 1048576,+1 by 1048577, The address of this value is 0x100001
③printf("%p\n", (unsigned int*)p + 0x1);
// if p It's an integer pointer ,p+-1 Represents skipping an unsigned integer size
Answer to this question :
0x100014,0x100001,0x100004
The code is as follows :
#include <stdio.h>
struct Test
{
int Num;
char* pcName;
short sDate;
char cha[2];
short sBa[4];
}*p;
int main()
{
printf("%p\n", p + 0x1);
printf("%p\n", (unsigned long)p + 0x1);
printf("%p\n", (unsigned int*)p + 0x1);
return 0;
}Pen test 3:

Particular attention :

①int* ptr2 = (int*)((int)a + 1);
//a Is the address of the first element of the array , Force type to int type , The value remains the same , The type changes
// if a=0x0012ff40, be a+1=0x0012ff44,(int)a+1=0x0012ff41
The storage of the array in memory ,vs Adopt small end storage mode ,0x00 00 00 01 Store in memory as 01 00 00 00
②printf("%x,%x", ptr1[-1], *ptr2);
//ptr2 The type is int*, Dereference operation access 1 Integer sizes , Then print in hexadecimal
Answer to this question :4,2000000
The code is as follows :
#include <stdio.h>
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;
}Pen test 4:

Particular attention :
①int a[3][2] = { (0,1),(2,3),(4,5) };
// Here is the comma expression , Note that (), No { } , See the figure below to see the difference !
Answer to this question :1
The code is as follows :
#include <stdio.h>
int main()
{
int a[3][2] = { (0,1),(2,3),(4,5) };
int* p;
p = a[0];
printf("%d", p[0]);
return 0;
}Pen test 5:

Particular attention :

①int a[5][5];
// In a two-dimensional array int a[5][5] in ,a Is the address of the first element of the array , The type is int (*)[5];
②int(*p)[4];
//p The array pointed to has 4 Elements , Each for int type ,+1 skip 1 individual (4 individual int An array of types )
③p = a;
int (*)[4]=int (*)[5];
printf("%p\n", &p[4][2] - &a[4][2]);
//&p[4][2] and &*(*(p+4)+2) equally .p Is an array pointer ,+4 skip 4 individual (4 individual int An array of types )//p++ It is the green icon in the above figure , Orange is p[4] Quoting
④&p[4][2] - &a[4][2]=-4;
//-4 Press %p Print , Yes, it will -4 The complement of is converted to hexadecimal
Original code :
10000000 00000000 00000000 00000100
Inverse code :
11111111 11111111 11111111 11111011
Complement code :
11111111 11111111 11111111 11111100
obtain 0xFF FF FF FC
Answer to this question :FF FF FF FC,-4
The code is as follows :
#include <stdio.h>
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]);
return 0;
}Pen test 6:

Particular attention :
①int* ptr1 = (int*)(&aa + 1);
//&aa What you get is the address of the entire array ,+1 Skip the entire 2D array
②int* ptr2 = (int*)(*(aa + 1));
//aa Is the address of the first row of the two-dimensional array ,
*(aa + 1)=aa[1],aa[1] Is the address of the first element in the second line , This type is int*, So here's (int*) redundant
Answer to this question :10,5
The code is as follows :
#include <stdio.h>
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;
}Pen test 7:

Particular attention :

①char* a[ ] = { "work","at","alibaba" };
// This array stores work、at、alibaba The address of the first element
②char** pa = a;
//pa Pointing to a The second element of the array , After dereferencing, we get at The address of the first element
③printf("%s\n", *pa);
//printf When printing ,%s According to the address of the first element , Print backwards , encounter \0 stop it
Answer to this question :at
The code is as follows :
#include <stdio.h>
int main()
{
char* a[] = { "work","at","alibaba" };
char** pa = a;
pa++;
printf("%s\n", *pa);
return 0;
}Pen test 8:
This topic is the epitome of pointer pen test questions

Particular attention :

Code analysis :
++cpp after cpp The address pointed to will change
①printf("%s\n", **++cpp);
//++cpp after ,cpp Point to c+2, After the first dereference, we get c+2, and c+2 Pointing to the array c The third element , The array is obtained after the second dereference c The third element “POINT” The address of the first character ,printf When printing ,%s According to the first character P Print the address backwards , encounter \0 stop it
②printf("%s\n", *--*++cpp+3);
//++cpp after ,cpp Point to c+1, After the first dereference, we get c+1,c+1 Again -1 Pointing to the array c First element , The array is obtained after the second dereference c First element "ENTER" The address of the first character ,+3 obtain T The address of ,printf When printing ,%s According to the characters T Print the address backwards , encounter \0 stop it
③printf("%s\n", *cpp[-2]+3);
//**(cpp-2)+3;cpp-2 Point to c+3, After the first dereference, we get c+3, The address points to the array c Fourth element , The array is obtained after the second dereference c Fourth element "FIRST" The address of the first character ,+3 obtain R The address of ,printf When printing ,%s According to the characters R Print the address backwards , encounter \0 stop it
④printf("%s\n", cpp[-1][-1]+1);
//cpp[-1][-1]+1 and *(*(cpp-1)-1)+1;cpp-1 Point to c+2, After the first dereference, we get c+2, The address -1 Pointing to the array c The second element , The array is obtained after the second dereference c The second element "NEW" The address of the first character ,+1 obtain E The address of ,printf When printing ,%s According to the characters E Print the address backwards , encounter \0 stop it
Answer to this question :POINT,ER,ST,EW
The code is as follows :
#include <stdio.h>
int main()
{
char* c[] = { "ENTER","NEW","POINT","FIRST" };
char** cp[] = { c + 3,c + 2,c + 1,c };
char*** cpp = cp;
printf("%s\n", **++cpp);
printf("%s\n", *--*++cpp+3);
printf("%s\n", *cpp[-2]+3);
printf("%s\n", cpp[-1][-1]+1);
return 0;
}Conclusion :
If it helps you ,
Don't forget it give the thumbs-up + Focus on Oh , Crab
If it helps you ,
Don't forget it give the thumbs-up + Focus on Oh , Crab
If it helps you ,
Don't forget it give the thumbs-up + Focus on Oh , Crab
边栏推荐
- Try the tuiroom of Tencent cloud (there is an appointment in the evening, which will be continued...)
- MSE API学习
- 使用 BR 备份 TiDB 集群数据到 Azure Blob Storage
- 使用高斯Redis实现二级索引
- School 1 of vulnhub
- Vulnhub tre1
- CIS芯片测试到底怎么测?
- 机械臂速成小指南(十二):逆运动学分析
- Data island is the first danger encountered by enterprises in their digital transformation
- Useful win11 tips
猜你喜欢

Apifox 接口一体化管理新神器

一. 基础概念

Cloud 组件发展升级
![About cv2 dnn. Readnetfromonnx (path) reports error during processing node with 3 inputs and 1 outputs [exclusive release]](/img/59/33381b8d45401607736f05907ee381.png)
About cv2 dnn. Readnetfromonnx (path) reports error during processing node with 3 inputs and 1 outputs [exclusive release]

CSDN语法说明

With st7008, the Bluetooth test is completely grasped

Yolov6:yolov6+win10--- train your own dataset

力扣 2319. 判断矩阵是否是一个 X 矩阵

YoloV6:YoloV6+Win10---训练自己得数据集

Jenkins 用户权限管理
随机推荐
Opencv学习笔记 高动态范围 (HDR) 成像
I wrote a markdown command line gadget, hoping to improve the efficiency of sending documents by garden friends!
Precautions for cjson memory leakage
Chapter 9 Yunji datacanvas was rated as 36 krypton "the hard core technology enterprise most concerned by investors"
c语言如何判定是32位系统还是64位系统
Phoenix JDBC
Yolov6:yolov6+win10--- train your own dataset
MSE API learning
Traversée des procédures stockées Oracle
Oracle 存储过程之遍历
Cloud component development and upgrading
理财产品要怎么选?新手还什么都不懂
力扣599. 两个列表的最小索引总和
《数字图像处理原理与实践(MATLAB版)》一书之代码Part2[通俗易懂]
pom. Brief introduction of XML configuration file label function
CSDN syntax description
Gorilla official: sample code for golang to open websocket client
Force buckle 599 Minimum index sum of two lists
Force buckle 1232 Dotted line
Useful win11 tips

