代码之家  ›  专栏  ›  技术社区  ›  Sachin Kainth

什么是内部指针变量?

  •  0
  • Sachin Kainth  · 技术社区  · 1 年前

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

    0 回复  |  直到 1 年前
        1
  •  8
  •   lifescore    1 年前

    你可以通过观看原始视频来了解 https://www.youtube.com/watch?v=Ranc3VvjI88

    p.s.检查9:25分钟=)

        2
  •  2
  •   Rubem Pacelli    1 年前

    把记忆放在一边。命令

    int *parr = arr;
    

    可以理解为:

    命名的整数指针 parr 设置为中第一个元素的内存地址 int 大堆 arr

    或者:

    命名的整数指针 parr 设置为变量的内部指针 arr

    在该命令中, arr 是一些 int 阵列,例如。,

    int arr[] = {10, 20, 30, 40};
    

    当你使用这种语法时,你是在告诉 parr 以存储的第一阵列元素的存储器地址 arr ( arr[0] ).我们将此内存地址称为 内部指针变量 全部的 composite data types (例如,数组、结构等)有自己的内部指针,并且它始终是其第一个元素的内存地址。请注意,它也适用于字符串,因为它们表示为 char 中的阵列 C 因此也是一种复合数据类型。此语法等效于 int *parr = &arr[0] ,但它要简洁得多,因此更容易被采用。当编译器使用变量的内部指针时,我们经常说“变量 衰变 转换为指向其第一个元素的指针”。另一方面,我们不能写入 int *p = i 如果 i 是单身 int 因为它是一个 primitive data type 因此它没有内部指针变量。

    作为一个简单的例子,看看下面的代码:

    #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