什么是内部指针变量?

问题描述 投票:0回答:2

我知道什么是指针,但我不知道什么是内部指针变量。有谁知道它们是什么?我是从现在很流行的一个模因中发现这个概念的。我在网上找不到合适的解释。

pointers
2个回答
6
投票

观看原视频即可了解https://www.youtube.com/watch?v=Ranc3VvjI88

附注检查 9:25 分钟 =)


0
投票

把模因放在一边。命令

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

© www.soinside.com 2019 - 2024. All rights reserved.