当前位置:网站首页>An understanding of & array names
An understanding of & array names
2022-07-06 00:19:00 【It's Yi'an】
A strange phenomenon
#include<stdio.h>
int main(void) {
int arr[5] = { 1,2,3,4,5 };
int(*p)[5] = &arr;
printf("%p\n", p); // After running, you will find that these two values are equal
printf("%p\n", *p);
return 0;
}
A strange secondary pointer
#include<stdio.h>
int main(void) {
int arr[5] = { 1,2,3,4,5 };
int(*p)[5] = &arr;
// The program runs successfully , And the results are :1
printf("%d\n", **p); // We can know p=&arr
printf("%d\n", **&arr); // Both are secondary pointers
return 0;
}
A strange explanation
An explanation of a strange problem
Pointer to array , The designer made this design in order to distinguish it from pointers to elements : A simple array name represents a pointer to the first element of the array , It needs to open up a separate space for storage , At the same time, the value in the array name space is immutable . If you want to represent the address of the entire array , Just above the simple array name , Improved the level , Change to secondary pointer , But don't give space alone .
Design a rule , When addressing an array name , Is to take the address of the first level pointer . You need a variable to store it , Need a space , This is a normal secondary pointer , But there is no separate space here , Just put the array name ( First level pointer ) Occupy space as its space , At the same time, improve its level , Change to secondary pointer , Mark this pointer ( Special secondary pointer ), Make a type to mark / Represents it :type(*)[]. If you want to dereference this secondary pointer , Just lower its level , Become a normal primary pointer
// These are just assumptions , In order to solve *p=p The problem reference comes up with a convincing explanation .
summary : The array name is a pointer constant ,& The array name is to take the address of the first level pointer , A secondary pointer , But it was given a special rule .
Some normal applications
As I understand it ,&arr Is a special secondary pointer , The type is type(*)[ ].
#include<stdio.h>
int main(void) {
int arr[5] = { 1,2,3,4,5 };
int(*p)[5]; // Define a pointer variable of this type
p= &arr; // Give it the value of this type
printf("%d\n",(*p)[1]); //*p Make it a normal first level pointer :arr
printf("%d\n", arr[1]); //arr: Pointer to the first element of the array
printf("%d\n", *(*p + 1));
printf("%d\n", *(*(&arr) + 1)); //p=&arr
printf("%d\n", *(arr + 1)); //*p=arr
printf("%d\n", arr[1]);
// The results are :2
// Is that much easier to understand
return 0;
}
边栏推荐
- MySql——CRUD
- 传输层协议------UDP协议
- Transport layer protocol ----- UDP protocol
- About the slmgr command
- 权限问题:source .bash_profile permission denied
- Classical concurrency problem: the dining problem of philosophers
- LeetCode 斐波那契序列
- Learn PWN from CTF wiki - ret2libc1
- Classic CTF topic about FTP protocol
- Notepad + + regular expression replace String
猜你喜欢
云呐|固定资产管理系统功能包括哪些?
如何利用Flutter框架开发运行小程序
Miaochai Weekly - 8
Detailed explanation of APP functions of door-to-door appointment service
Ffmpeg learning - core module
Yunna | what are the main operating processes of the fixed assets management system
LeetCode 1598. Folder operation log collector
【NOI模拟赛】Anaid 的树(莫比乌斯反演,指数型生成函数,埃氏筛,虚树)
Senparc. Weixin. Sample. MP source code analysis
Tools to improve work efficiency: the idea of SQL batch generation tools
随机推荐
Gd32f4xx UIP protocol stack migration record
Configuring OSPF load sharing for Huawei devices
LeetCode 6005. The minimum operand to make an array an alternating array
After summarizing more than 800 kubectl aliases, I'm no longer afraid that I can't remember commands!
[online chat] the original wechat applet can also reply to Facebook homepage messages!
Multithreading and high concurrency (8) -- summarize AQS shared lock from countdownlatch (punch in for the third anniversary)
常用API类及异常体系
OpenCV经典100题
Extracting profile data from profile measurement
MySQL存储引擎
notepad++正则表达式替换字符串
OS i/o devices and device controllers
剖面测量之提取剖面数据
第16章 OAuth2AuthorizationRequestRedirectWebFilter源码解析
LeetCode 1598. Folder operation log collector
Global and Chinese markets of POM plastic gears 2022-2028: Research Report on technology, participants, trends, market size and share
【DesignMode】装饰者模式(Decorator pattern)
关于slmgr命令的那些事
Mysql - CRUD
Notepad + + regular expression replace String