1

我的程序的这一部分在处理 C 中的动态数组时遇到了麻烦。我的老师提供了原型函数。我被困在附加部分。我只是不明白为什么 p 是双指针。起初我想也许我们应该创建动态数组的数组,但删除函数不需要双指针。这是我到目前为止所拥有的:

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

/*
Name: Marcus Lorenzana
Assignment: HW 4
*/

struct _dynamic
{

    int size;
    int max_size;
    int *data;

};
typedef struct _dynamic dlist_t;

dlist_t * make_dlist(int size);
void app_dlist(dlist_t **p, int value);
int ins_dlist(dlist_t **p, int val, int index);
int del_dlist(dlist_t *p, int index);

int main(int argc, char * argv[])
{

    dlist_t *plist;
    plist = make_dlist(50);



    return 0;
}

dlist_t *make_dlist(int size)
{

    dlist_t *list;
    list = (dlist_t *) malloc (sizeof(dlist_t)); 

    list->size = 0;
    list->max_size = size;

    list->data = (int *) malloc((sizeof(int))*size);


    return list;

}

void app_dlist(dlist_t **p, int value)
{
    /*
    int size;
    size = p->size;

    p->data->size = value;

    size++;
    p->size = size; 
    */



}

int ins_dlist(dlist_t **p, int val, int index)
{

}

int del_dlist(dlist_t *p, int index)
{

}
4

1 回答 1

1

如果您有一个动态大小的数组,则在追加时可能需要重新分配内存。为了让您更新调用者的指针,您必须通过引用传递它。在 C 语言中,这意味着传递一个指针(在本例中为指针)。

删除时,您不需要更新调用者的指针,因此只*需要一个。

您应该阅读comp.lang.c FAQ 问题 4.8,并且可能阅读第 4 节的全部内容,以便更熟悉指针语义。

于 2013-06-21T20:16:41.573 回答