我知道什么是指针,但我不知道什么是内部指针变量。有谁知道它们是什么?我是从现在很流行的一个模因中发现这个概念的。我在网上找不到合适的解释。
观看原视频即可了解https://www.youtube.com/watch?v=Ranc3VvjI88
附注检查 9:25 分钟 =)
把模因放在一边。命令
int *parr = arr;
可以读作:
名为
的整数指针被设置为parr
数组中第一个元素的内存地址int
arr
或者,另一种选择:
名为
的整数指针被设置为变量parr
的内部指针arr
在此命令中,
arr
是一些int
数组,例如,
int arr = {10, 20, 30, 40};
当您在该语法中使用数组名称时,您是在告诉
parr
存储 arr
(arr[0]
) 的第一个数组元素的内存地址。我们将此内存地址称为内部指针变量。所有复合数据类型(例如数组、结构体等)都有自己的内部指针,并且它始终是其第一个元素的内存地址。请注意,它也适用于字符串,因为它们在 char
中表示为 C
数组,因此也是复合数据类型。该语法与 int *parr = &arr[0]
等效,但更简洁,因此更受欢迎。当编译器使用变量的内部指针时,我们经常说变量“衰减”成指向其第一个元素的指针。另一方面,如果 int *p = i
是单个 i
,我们就不能写 int
,因为它是原始数据类型,因此它没有内部指针变量。 作为一个简单的例子,看一下这段代码:
#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 pass do it as the `int` 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"
"PS: - Each memory address, by definition, stores 1 byte and is usually represented in hexadecimal.\n"
" - Each memory address of a 64-bit (32-bit) memory architecture has a 64/4=16 (32/4=8) hexadecimal digits\n\n",
&i, &i[0], 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