当前位置:网站首页>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;
}
边栏推荐
- Go learning --- read INI file
- 7.5模拟赛总结
- 常用API类及异常体系
- Knowledge about the memory size occupied by the structure
- Determinant learning notes (I)
- 【DesignMode】组合模式(composite mode)
- 如何解决ecology9.0执行导入流程流程产生的问题
- Codeforces gr19 D (think more about why the first-hand value range is 100, JLS yyds)
- 多线程与高并发(8)—— 从CountDownLatch总结AQS共享锁(三周年打卡)
- Mysql - CRUD
猜你喜欢
Effet Doppler (déplacement de fréquence Doppler)
关于slmgr命令的那些事
Priority queue (heap)
提升工作效率工具:SQL批量生成工具思想
The difference of time zone and the time library of go language
notepad++正則錶達式替換字符串
Huawei equipment is configured with OSPF and BFD linkage
LeetCode 1598. Folder operation log collector
Hudi of data Lake (2): Hudi compilation
Classical concurrency problem: the dining problem of philosophers
随机推荐
LeetCode 斐波那契序列
硬件及接口学习总结
Hudi of data Lake (1): introduction to Hudi
Pointer pointer array, array pointer
Classic CTF topic about FTP protocol
notepad++正则表达式替换字符串
LeetCode 1189. Maximum number of "balloons"
Start from the bottom structure and learn the introduction of fpga---fifo IP core and its key parameters
7.5 simulation summary
Calculate sha256 value of data or file based on crypto++
Knowledge about the memory size occupied by the structure
FFMPEG关键结构体——AVFormatContext
Codeforces round 804 (Div. 2) [competition record]
OS i/o devices and device controllers
电机的简介
Miaochai Weekly - 8
Global and Chinese markets of universal milling machines 2022-2028: Research Report on technology, participants, trends, market size and share
认识提取与显示梅尔谱图的小实验(观察不同y_axis和x_axis的区别)
Classical concurrency problem: the dining problem of philosophers
【DesignMode】适配器模式(adapter pattern)