当前位置:网站首页>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;
}
边栏推荐
- 认识提取与显示梅尔谱图的小实验(观察不同y_axis和x_axis的区别)
- Teach you to run uni app with simulator on hbuilderx, conscience teaching!!!
- 第16章 OAuth2AuthorizationRequestRedirectWebFilter源码解析
- FFT learning notes (I think it is detailed)
- QT -- thread
- 2022.7.5-----leetcode.729
- STM32 configuration after chip replacement and possible errors
- FFT 学习笔记(自认为详细)
- 时间戳的拓展及应用实例
- AtCoder Beginner Contest 254【VP记录】
猜你喜欢
Mysql - CRUD
[online chat] the original wechat applet can also reply to Facebook homepage messages!
MySQL functions
There is no network after configuring the agent by capturing packets with Fiddler mobile phones
FFT learning notes (I think it is detailed)
FFmpeg学习——核心模块
Atcoder beginer contest 258 [competition record]
Browser local storage
What are the functions of Yunna fixed assets management system?
Determinant learning notes (I)
随机推荐
Multithreading and high concurrency (8) -- summarize AQS shared lock from countdownlatch (punch in for the third anniversary)
LeetCode 1598. Folder operation log collector
云呐|固定资产管理系统主要操作流程有哪些
18. (ArcGIS API for JS) ArcGIS API for JS point collection (sketchviewmodel)
Calculate sha256 value of data or file based on crypto++
LeetCode 6006. Take out the least number of magic beans
MySQL之函数
The difference of time zone and the time library of go language
Room cannot create an SQLite connection to verify the queries
Choose to pay tribute to the spirit behind continuous struggle -- Dialogue will values [Issue 4]
QT -- thread
Global and Chinese markets of universal milling machines 2022-2028: Research Report on technology, participants, trends, market size and share
How to solve the problems caused by the import process of ecology9.0
Huawei equipment configuration ospf-bgp linkage
2022.7.5-----leetcode.729
PV static creation and dynamic creation
Notepad++ regular expression replacement string
What are the functions of Yunna fixed assets management system?
MySQL functions
STM32 configuration after chip replacement and possible errors