wiw*_*wen 2 c arrays malloc pointers
typedef struct node {
int value;
struct node* next;
}node;
int* to_array (node* ll, int size) {
int i = 0;
int* arr = malloc(size*sizeof(int));
while (ll) {
arr[i] = ll->value;
ll = ll->next;
i++;
}
return arr;
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释原因
int* arr = malloc(size);
Run Code Online (Sandbox Code Playgroud)
会给我们一个数组吗?我想当我们有指针时,我们不能单独改变它arr[i] = 5
或类似的东西.
你的确是一个非常好的问题.当然,已经有人问过并多次回答SO.但是一个好问题.
从C/C++ FAQ:
http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr
数组不是指针,尽管它们密切相关(参见问题6.3)并且可以类似地使用(参见问题4.1,6.8,6.10和6.14).
声明一个数组(例如int a[5]
)时,您已经为五个"int"元素分配了存储空间.您可以访问每个元素a[i]
.
当您声明指针(例如int *b
)时,您尚未分配任何存储空间.
您可以同时声明和初始化指针:
int *b = NULL; /* Initialize to 0 */
... OR ...
int *b = malloc (5 * sizeof (int)); /* Allocate storage for 5 "int" elements */
Run Code Online (Sandbox Code Playgroud)声明数组时a
,您从堆栈中分配了空间.分配无法更改.
声明时b
,您分配了相同的空间量,但是您已从堆中分配.此外,您可以随时更改b
为指向其他任何内容.您还可以通过realloc()
内存来更改存储空间.
就像您可以使用索引语法一样a[i]
,您使用完全相同的语法b[i]
.
此链接可能有助于解释:http://www.geeksforgeeks.org/g-fact-5/
PS:当你"有一个指针",你最肯定CAN "更改个别像arr[i] = 5
什么".