我知道指针是什么,但我不知道内部指针变量是什么。有人知道它们是什么吗?我最近在一个很流行的梗中看到了这个概念,但我在网上找不到一个合理的解释。
我知道指针是什么,但我不知道内部指针变量是什么。有人知道它们是什么吗?我最近在一个很流行的梗中看到了这个概念,但我在网上找不到一个合理的解释。
int *parr = arr;
可以理解为:
整数指针命名为
parr
,被设置为arr
整数数组中第一个元素的内存地址
或者,另一种说法:
整数指针命名为
parr
,被设置为变量arr
的内部指针
在这个命令中,arr
是一个整数数组,例如:
int arr[] = {10, 20, 30, 40};
parr
存储arr
的第一个数组元素(arr[0]
)的内存地址。我们称这个内存地址为内部指针变量。所有的复合数据类型(例如数组、结构等)都有自己的内部指针,它总是指向其第一个元素的内存地址。需要注意的是,对于字符串来说,它们在C
中被表示为char
数组,因此也是一种复合数据类型。这个语法等同于int *parr = &arr[0]
,但更加简洁,因此更常用。当编译器使用变量的内部指针时,我们经常说"变量衰变为指向其第一个元素的指针"。另一方面,如果i
是一个单个的int
,我们不能写int *p = i
,因为它是一个原始数据类型,因此没有内部指针变量。#include <stdio.h>
int main() {
int i[] = {10, 20, 30, 40};
int *pi = i; // pi points to the internal pointer of the variable `i`, that is, the address of its first array element, 10.
int d = 5;
// int *pd = d; // you cannot do it as `d` has no internal since it is a primitive data type
printf("The internal pointer of the int array is : %p\n"
"The address of the first int array element is : %p\n"
"The stored value (.i.e., the memory address) of the pointer is: %p\n",
(void*)i, (void*)&i[0], (void*)pi);
return 0;
}
The internal pointer of the int array is : 0x7ffd2cfad750
The address of the first int array element is : 0x7ffd2cfad750
The stored value (.i.e., the memory address) of the pointer is: 0x7ffd2cfad750