1和2的区别是什么?
int *p; p = malloc(2 * sizeof(int));
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在一条语句中完成了它。这是可取的,因为它确保变量被初始化,并且更容易看到变量被初始化。未初始化的变量包含垃圾,是错误的常见来源。通常,立即初始化每个变量是一个好主意,即使它是0
或NULL
。