关于C语言中链表的问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 17:33:27
这个程序主要作用是高精度算法中的加法与乘法,但是由于大小限制,我只能吧乘法的删掉,给大家粗劣地看一下,我主要想问,这里使用了链表了么,因为他每个函数都是结构体指针,这样做有什么用呢,作用是什么,有什么好处?

typedef struct number NUMBER;
struct number {
int length;
char *data;
};
NUMBER *make_number(long n)
{
char buffer[16];
int len, i;
NUMBER *u;

len = sprintf(buffer, "%d", (n >= 0) ? n : -n);
for (i = 0; buffer[i] != '\0'; i++)
buffer[i] = buffer[i] - '0';

u = (NUMBER *) malloc(sizeof(NUMBER));
u->length = len;
u->data = (char *) malloc(sizeof(char)*(len+1));
memmove(u->data, buffer, len+1);
return u;
}
NUMBER *add(NUMBER *opn1, NUMBER *opn2)
{
int m = opn1->length;
char *u = opn1->data;
int n = opn2->length;
char *v = opn2->data;
c

返回值是结构体的指针的话,这样当你调用函数是,只要在赋值号"=" 左边设置一个结构体指针就可得到函数执行完的结果.

这里并没有使用链表,只是函数传递信息的一种形式.

c语言中函数参数的传递其实是一种拷贝,比如一个函数int example(int x),如果你调用此函数, 用y=1 代入, 即 example(y); 则无论你在函数example中如何改变形式参数x的值,都不会影响到y的值, 即函数执行的前后,y的值保持不变.

但有时你想要在执行完函数后改变y的值,这是你就要用到指针,即int example(int * x); 调用是用example(&y);此时在函数中改变x的值同样会改变y的值.

上面的例子是用到函数的形参参数来传递信息;你的程序中是通过函数的返回值来传递信息.

若你想通过函数参数传递信息的话,你可以在每一个函数声明时,多加一个形参,
如:
NUMBER *add(NUMBER *opn1, NUMBER *opn2, NUMBER * result);
函数体中函数的执行结构传递给result即可. 在你调用时,只要传入相应的结构体指针就可以了.

不知道有没有说清楚,请高手再补充吧~~~