代码之家  ›  专栏  ›  技术社区  ›  Aleksa Ristic

int*val=otherVal和int-val=otherVal之间的指针差

c
  •  -2
  • Aleksa Ristic  · 技术社区  · 6 年前

    type *name vs type* name 我知道答案。

    我有这样的代码:

    int a = 1;
    printf("a = %d", a); // Prints 1
    
    int *pt = a;
    printf("pt = %d", pt); // Prints 1
    
    *pt = 2; // Crash why? What am i pointing to here?
    &pt = 2; // Not even compiling since 
    pt = 2; // Works
    
    printf("pt = %d\n", pt); // Prints 2
    printf("a = %d\n", a); // Prints 1
    

    a 我应该做的 int *pt = &a *pt = 2 这不是我的问题。

    我的问题是在这种情况下,是否使用 int *pt = a 与使用相同 int pt = a

    2 回复  |  直到 6 年前
        1
  •  1
  •   David C. Rankin    6 年前
    int a = 1;
    ...
    int *pt = a;
    

    尝试存储该值 1 用指针握住 pt . 任何对 保证将故障隔离为 address 1 位于系统保留内存范围的底部,您无法访问该范围,从而导致访问冲突和SegFault。

    指针只是一个普通变量,用于保存 地址 其他的东西作为它的价值。换句话说,一个指针 指向 可以找到其他内容的地址。通常认为一个变量包含一个立即值,例如 int a = 5; ,指针只会保存地址,其中 5 int *b = &a; . 无论指针指向什么类型的对象,其工作方式都是相同的。它能够以这种方式工作,因为 type 指针的位置控制指针算法,例如使用 char * 指针, pointer+1 指向下一个字节,表示 int * 指针+1 将指向下一个 int pointer . (因此,指针只是一个指针……其中算术运算由 类型 )

    int a = 1;
    ...
    int *pt = &a;
    

    a 存储在内存中的指针变量 pt pt (例如。 *pt )

        2
  •  0
  •   Mr.Yellow    6 年前

    pt 指向,指向什么 a *a 绝对不是有效且可访问的地址。在尝试取消引用时,您很可能会遇到分段错误。这在某种程度上与通过创建空指针相同 int *pt = 0

    请记住,将带符号的int转换为地址可能会有一些奇怪的事情发生,这只会让整个事情变得更糟。