C语言 使用malloc的不同方式



1和2的区别是什么?

  1. int *p;
    p = malloc(2 * sizeof(int));
    
  2. int *p = malloc(2 * sizeof(int));
    

我第一次学的方法是第一种,但我见过有人做第二种。1和2是一样的吗?我想是的,但是我很困惑,因为我不明白为什么数字2是

int *p = malloc(2 * sizeof(int));

int p = malloc(2 * sizeof(int));

的用法是for array。在后面的代码中,他使用p来保存一些想要的值。

p[0] = i;
p[1] = j;

(1)和(2)是相同的,用于初始化指针与内存分配。

我想你是混淆了如何初始化指针,而不是如何使用malloc()。看看一些关于"初始化指针"的文章。就像这个。

int number = 88;     // An int variable with a value
int * pNumber;       // Declare a pointer variable called pNumber pointing to an int (or int pointer)
pNumber = &number;   // Assign the address of the variable number to pointer pNumber

int * pAnother = &number; // Declare another int pointer and init to address of the variable number

int p = malloc(2 * sizeof(int));

这样声明指针是不正确的,在这种情况下,p只是一个整型变量,而不是指向整型变量的指针。

1和2的区别是什么?

1和2做同样的事情。编译器应该生成完全相同的代码。它们都声明一个int *类型的变量p,然后malloc返回的指针初始化p

它是int *p = ...,因为int *是类型。变量是p。它将变量p声明为类型int *,然后赋值给p

的不同之处在于,2在一条语句中完成了它。这是可取的,因为它确保变量被初始化,并且更容易看到变量被初始化。未初始化的变量包含垃圾,是错误的常见来源。通常,立即初始化每个变量是一个好主意,即使它是0NULL

你会经常看到代码分别声明变量和初始化变量;有时,所有变量都在每个函数的顶部声明。这是一种古老的风格,当C要求您在函数开始时声明所有变量时。这不再是一个问题。你现在可以根据需要声明变量了。

最新更新