typedef struct myLink {
int data;
struct myLink *next;
} myLink, *myLLink;
1、指针的指针
对于上面的简单结构,用函数赋值需要传递引用,需要用到指针的指针。对指针使用不是很清楚的童鞋很是头痛。
void initlink(myLink** head) {
*head= (myLink*)malloc(sizeof(myLink));
if(!*head){
printf("没有可用内存!");
}
(*head)->next = NULL;
}
int main() {
myLink* head;
initlink(&head);
}
2、利用函数返回的方式
为避免使用指针的指针,可以利用函数返回的方式给指针赋值。这也是最简单,最易理解的方式。
myLink* initlink( ) {
myLink* temp = (myLink*)malloc(sizeof(myLink));
temp->next = NULL;
return temp;
}
int main() {
myLink *head;
head = initlink();
}
3、变相使用指针的指针
myLLink是myLink结构类型的指针。
void initlink(myLLink* head) {
*head = (myLink*)malloc(sizeof(myLink));
(*head) ->next=NULL;
}
int main() {
myLLink head;
initlink(&head);
}
4、利用全局变量避免传递指针
#include <stdio.h>
#include <stdlib.h>
typedef struct myLink {
int data;
struct myLink *next;
} myLink;
myLink * head;
void creatlink( int data);
void showlist();
void printlink(myLink*);
int main() {
head=NULL;
creatlink(32);
creatlink(42);
creatlink(52);
creatlink(62);
showlist();
printlink(head);
}
void creatlink( int data) {
myLink* temp = (myLink*)malloc(sizeof(myLink));
temp->data = data;
temp->next = head;
head = temp;
}
void showlist() {
myLink* temp = head;
while (temp) {
printf("%d\n", temp->data);
temp = temp->next;
}
}
void printlink(myLink* p){
if(p ==NULL){
printf("\n");
return;
}
printlink(p->next);
printf("%d ",p->data);
}