很少有人怀疑C中的指针

时间:2013-01-27 13:19:15

标签: c

1)初始化我使用的指针:

int number, *Pnumber;
    Pnumber=&number;
    number=10;

我这样做了吗?

怎么样:

int *Pnumber;
*Pnumber=10;

当我编译它时,我得到:

  

RUN FAILED(退出值1,总时间:858ms)

顺便说一句。我是否需要使用免费(Pnumber)来释放内存?

5 个答案:

答案 0 :(得分:5)

  

我这样做了吗?

是的,你是。

  

怎么样:

  `int *Pnumber;  
   *Pnumber=10;`

Pnumber是一个单位指针。取消引用此指针会导致未定义的行为。 Pnumber必须指向已分配的内存(对于变量或动态分配的内存区域)。

  

顺便说一句。我是否需要使用免费(Pnumber)来释放内存?

只要您不使用malloc,请不要使用free

答案 1 :(得分:2)

在第一个版本中,您将指针Pnumber指向已经分配的内存,因此您可以更改指针指向的值。这个版本是正确的。在第二个版本中,您永远不会指定指向的指针(它保持未初始化),因此当您尝试访问内存时,这将导致错误。所以第二个版本正确。

答案 2 :(得分:1)

你的第一种方法是正确的。

但是错了:

int *Pnumber;
*Pnumber=10;

因为指针没有指向有效的内存,而在第一种方法中它指的是。

答案 3 :(得分:1)

第一个是正确的

在第二种情况下,您缺少将指针指向内存空间。

指针是一个地址,所以

如果我们有

int *p;

这意味着p是一个地址

和* p是内存地址的内容。

因此在使用

填充内存之前,应将指针指向内存空间
*p = 5;

答案 4 :(得分:1)

如果您使用指针,则“指向您所做的变量:

 int number, *Pnumber;
Pnumber=&number;
number=10;

Pointer的优势在于您可以节省内存到程序中,因此如果您想更改数字的值,这是一个32位的整数,您可以使用      * Pnumber = 10; 在这里你使用整数,但如果你使用它们的数组或双重或浮动它的大量内存,为什么你最好在32位OS体系结构中保存32位变量的地址总是使用指针在didn'无论你指的是什么类型