当前位置:网站首页>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;
}边栏推荐
- Hudi of data Lake (1): introduction to Hudi
- Room cannot create an SQLite connection to verify the queries
- PV static creation and dynamic creation
- MDK debug时设置数据实时更新
- Start from the bottom structure and learn the introduction of fpga---fifo IP core and its key parameters
- [designmode] adapter pattern
- Codeforces gr19 D (think more about why the first-hand value range is 100, JLS yyds)
- Configuring OSPF GR features for Huawei devices
- Classical concurrency problem: the dining problem of philosophers
- notepad++正则表达式替换字符串
猜你喜欢

LeetCode 1598. Folder operation log collector

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

【DesignMode】组合模式(composite mode)

wx.getLocation(Object object)申请方法,最新版
![Atcoder beginer contest 258 [competition record]](/img/e4/1d34410f79851a7a81dd8f4a0b54bf.gif)
Atcoder beginer contest 258 [competition record]

What are Yunna's fixed asset management systems?

云呐|固定资产管理系统主要操作流程有哪些

AtCoder Beginner Contest 254【VP记录】

Configuring OSPF load sharing for Huawei devices

多线程与高并发(8)—— 从CountDownLatch总结AQS共享锁(三周年打卡)
随机推荐
[binary search tree] add, delete, modify and query function code implementation
7.5 decorator
FFMPEG关键结构体——AVFrame
剖面测量之提取剖面数据
MySql——CRUD
云呐|固定资产管理系统功能包括哪些?
Knowledge about the memory size occupied by the structure
XML配置文件
MySQL存储引擎
PHP determines whether an array contains the value of another array
认识提取与显示梅尔谱图的小实验(观察不同y_axis和x_axis的区别)
[noi simulation] Anaid's tree (Mobius inversion, exponential generating function, Ehrlich sieve, virtual tree)
Start from the bottom structure and learn the introduction of fpga---fifo IP core and its key parameters
[Luogu p3295] mengmengda (parallel search) (double)
Gd32f4xx UIP protocol stack migration record
NSSA area where OSPF is configured for Huawei equipment
Key structure of ffmpeg - avframe
Calculate sha256 value of data or file based on crypto++
What are Yunna's fixed asset management systems?
FFT learning notes (I think it is detailed)