当前位置:网站首页>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;
}边栏推荐
- 7.5 simulation summary
- FFMPEG关键结构体——AVFrame
- [designmode] composite mode
- Location based mobile terminal network video exploration app system documents + foreign language translation and original text + guidance records (8 weeks) + PPT + review + project source code
- 认识提取与显示梅尔谱图的小实验(观察不同y_axis和x_axis的区别)
- 单商户V4.4,初心未变,实力依旧!
- 2022.7.5-----leetcode. seven hundred and twenty-nine
- 《编程之美》读书笔记
- Single source shortest path exercise (I)
- Multithreading and high concurrency (8) -- summarize AQS shared lock from countdownlatch (punch in for the third anniversary)
猜你喜欢

亲测可用fiddler手机抓包配置代理后没有网络

What are the functions of Yunna fixed assets management system?

从底层结构开始学习FPGA----FIFO IP核及其关键参数介绍

How much do you know about the bank deposit business that software test engineers must know?

Gd32f4xx UIP protocol stack migration record

wx. Getlocation (object object) application method, latest version

Go learning - dependency injection

Hudi of data Lake (1): introduction to Hudi

QT QPushButton details

电机的简介
随机推荐
Global and Chinese markets of POM plastic gears 2022-2028: Research Report on technology, participants, trends, market size and share
【DesignMode】组合模式(composite mode)
选择致敬持续奋斗背后的精神——对话威尔价值观【第四期】
Notepad++ regular expression replacement string
Chapter 16 oauth2authorizationrequestredirectwebfilter source code analysis
FPGA内部硬件结构与代码的关系
FFMPEG关键结构体——AVFormatContext
State mode design procedure: Heroes in the game can rest, defend, attack normally and attack skills according to different physical strength values.
云呐|公司固定资产管理系统有哪些?
Pointer - character pointer
[binary search tree] add, delete, modify and query function code implementation
The difference of time zone and the time library of go language
Add noise randomly to open3d point cloud
【DesignMode】适配器模式(adapter pattern)
Atcoder beginer contest 258 [competition record]
Solve the problem of reading Chinese garbled code in sqlserver connection database
What are Yunna's fixed asset management systems?
Global and Chinese market of valve institutions 2022-2028: Research Report on technology, participants, trends, market size and share
Search (DFS and BFS)
Shardingsphere source code analysis