当前位置:网站首页>[advanced C language] 8 written questions of pointer
[advanced C language] 8 written questions of pointer
2022-07-07 01:25:00 【Muxixi】
I'm Muxi Xi
List of articles
Written test questions of pointer
The meaning of array names :
- sizeof( Array name ), The array name here represents the entire array , It calculates the size of the entire array .
- & Array name , The array name here represents the entire array , It takes out the address of the entire array .
- In addition, all array names represent the address of the first element .
Written test question 1
#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;
}
1.&a It takes out the address of the entire array ,&a+1 Is to skip a type of int(*)[5] Array of .
2.a Not alone sizeof Inside , And the array name a There is no address symbol in front , here a Represents the address of the first element .a+1 Skip a type of int The integer of , That is, the address of the second element .
3.ptr-1 Is to skip a type of int The integer of .
4.*(a+1)–>a[1];*(ptr-1)–>ptr[-1].
Question 2 of the written examination
struct Test
{
int Num;
char* pcName;
short sDate;
char cha[2];
short sBa[4];
}*p = (struct Test*)0x100000;
// hypothesis p The value of is 0x100000. What are the values of the expressions in the following table ?
// It is known that , Structure Test The variable size of type is 20 Bytes
//86 In the environment
int main()
{
printf("%p\n", p + 0x1);//0x100000+20-->0x100014
//p+1 Indicates skipping a structure , The size of a structure is 20 Bytes
printf("%p\n", (unsigned long)p + 0x1);
//0x100000+1-->0x100001
printf("%p\n", (unsigned int*)p + 0x1);//0x100000+4-->0x100004
p+1 Indicates skipping a type of unsigned int The integer of , Four bytes
return 0;
}
Written test question 3
#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;
}
1.ptr[-1] amount to *(ptr-1)
2.&a It takes out the address of the entire array ,&a+1 Is to skip a type of int(*)[4] Array of .
3.a Not alone sizeof Inside , And the array name a There is no address symbol in front , here a Represents the address of the first element .a Forced type conversion to int,a+1 Add integers , Then forcibly convert it into a pointer , Skipped a byte , One int The type size is 4 Bytes , The data is stored in the small end , Therefore, by pointing 01 The pointer to , Yes 00. and prt2 The access right of is to access 4 Bytes , so ptr2 What I visited was 0x02000000.
Written test question 4
#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;
}
because int a[3][2] = {(0,1),(2,3),(4,5)} It's a comma expression .
Comma expression , Is multiple expressions separated by commas .
Comma expression , From left to right . The result of the entire expression is the result of the last expression .
so int a[3][2] ={1,3,5};
a[0] Is the array name in the first row ,a[0] Represents the address of the first element , namely a[0][0] The address of ,&a[0][0].
Written test question five
#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;
}
1.p[4][2] amount to *(*(p+4)+2).
2. The two hands subtract , The result is the number of elements between two pointers .
3.%p What is printed directly is the complement , Addresses are considered unsigned integers .
Written test question six
#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;
}
1.*(aa+1) amount to aa[1], Represents the array name of the second row .
2.&aa It takes out the address of the entire array ,&aa+1 Is to skip a type of int(*)[2][5] Array of .
3.aa Not alone sizeof Inside , And the array name aa There is no address symbol in front , here aa Represents the array name of the first row ,aa+1 Represents the array name of the second row .
Written test question 7
#include <stdio.h>
int main()
{
char* a[] = {
"work","at","alibaba" };
char** pa = a;
pa++;
printf("%s\n", *pa);
return 0;
}
pa++ Is to skip a type of char* The pointer to .
Written test question 8
#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;
}
1.*cpp[-2] amount to *(*(cpp-2)).
2.cpp[-1][-1] amount to *(*(cpp-1)-1)
printf(“%s\n”, **++cpp); The result is :
printf(“%s\n”, *-- * ++cpp + 3); The result is :
printf(“%s\n”, *cpp[-2] + 3); The result is :
printf(“%s\n”, cpp[-1][-1] + 1); The result is :
At the end
Then the notes of pointer pen test questions are over here , What doubts or feelings are wrong , Leave a comment in the comments section .
But the road ahead , Not to lose time !
边栏推荐
猜你喜欢
2022 Google CTF SEGFAULT LABYRINTH wp
Asset security issues or constraints on the development of the encryption industry, risk control + compliance has become the key to breaking the platform
LLDP兼容CDP功能配置
Transplant DAC chip mcp4725 to nuc980
boot - prometheus-push gateway 使用
身体质量指数程序,入门写死的小程序项目
Yunna - work order management system and process, work order management specification
tansig和logsig的差异,为什么BP喜欢用tansig
Your cache folder contains root-owned files, due to a bug in npm ERR! previous versions of npm which
Make Jar, Not War
随机推荐
C# 计算农历日期方法 2022
C语言实例_5
Installation and testing of pyflink
负载均衡性能参数如何测评?
MySQL中回表的代价
Case development of landlord fighting game
JTAG debugging experience of arm bare board debugging
Realize incremental data synchronization between MySQL and ES
黑马笔记---创建不可变集合与Stream流
Come on, don't spread it out. Fashion cloud secretly takes you to collect "cloud" wool, and then secretly builds a personal website to be the king of scrolls, hehe
Boot - Prometheus push gateway use
What does security capability mean? What are the protection capabilities of different levels of ISO?
系统休眠文件可以删除吗 系统休眠文件怎么删除
c语言—数组
Taro中添加小程序 “lazyCodeLoading“: “requiredComponents“,
Taro2.* applet configuration sharing wechat circle of friends
NEON优化:矩阵转置的指令优化案例
7.6 simulation summary
golang中的WaitGroup实现原理
docker 方法安装mysql