C中的指针:为int *分配文字

时间:2015-10-29 02:46:13

标签: c pointers

当我们提供如下定义时,这里真的发生了什么?

public Publication(String pubTitle, double pubCost, int pubQuantity)
{
    title = pubTitle;
    cost = pubCost;
    quantity = pubQuantity;
}

幕后真的发生了什么?

解决

此处int * a = 2; 将指向内存地址2。

2 个答案:

答案 0 :(得分:4)

从整数到指针的转换结果是在C中实现定义的,引用C99第6.3.2.3节:

  

5整数可以转换为任何指针类型。除非先前指定,否则结果是实现定义的,可能未正确对齐,可能不指向引用类型的实体,并且可能是陷阱表示。

所以你不应该依赖这样的转换,除非文字是0,它会给你一个空指针。

实际上,您可能会发现指针将保存由整数常量指定的内存地址:

#include <stdio.h>

int main(void) {
  int * a = 2;
  printf("%p", a); /* prints 0x2 in gcc */
  return 0;
}

大多数编制者也会警告这个不安全的演员:

 $ gcc test.c test.c: In function ‘main’: test.c:4:13: warning:
 initialization makes pointer from integer without a cast [enabled by
 default]    int * a = 2;
                       ^

答案 1 :(得分:0)

在这里,“a”的内存不会被分配。因此,它给出了分段错误。

它会尝试将2作为地址,而指针a将尝试指向地址2.但可能是我们的系统没有该地址,或者它可能被分配给其他进程。

因此,在编译时,它会给出一条警告信息。

警告:初始化使得整数指针没有强制转换[默认情况下启用]