c指针
指针学习:
对于指针我觉得,申明一个指针就是一个指向,必须要有指向的地址,地方;不然指针就是空的,没用,因为他没有指向任何可使用的东西。例如:
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int *p = arr;
上述例子代表申明一个指针p 指向int类型的,我说了每个指针都要指向一个地址不然就是空的NULL,这里p指向了arr[0] 的地址。
你使用print(“%d”,*p)可以输出1;
再比如结构体指针
然后再main函数里面申明:
linklist test;
gets(test->name); // 输入
printf("%s",test->name); // 输出
看样子没什么不对吧,错误,linklist申明的test也是一个指针,他没有指向任何东西,所以是NULL,test->name不指向任何东西了,没意义了,所以我们可以这样:
再申明的时候
linklist test; 改成 linklist test =(linklist)malloc(sizeof(lnode));
以上实例,可以发现我们给test分配了指定大小的内存(sizeof(lnode)),test现在有指向的地址了,现在有意义了,执行代码
对于指针我觉得,申明一个指针就是一个指向,必须要有指向的地址,地方;不然指针就是空的,没用,因为他没有指向任何可使用的东西。例如:
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int *p = arr;
上述例子代表申明一个指针p 指向int类型的,我说了每个指针都要指向一个地址不然就是空的NULL,这里p指向了arr[0] 的地址。
你使用print(“%d”,*p)可以输出1;
再比如结构体指针
typedef struct node
{
int num;
char name[20];
}lnode,*linklist;
然后再main函数里面申明:
linklist test;
gets(test->name); // 输入
printf("%s",test->name); // 输出
看样子没什么不对吧,错误,linklist申明的test也是一个指针,他没有指向任何东西,所以是NULL,test->name不指向任何东西了,没意义了,所以我们可以这样:
再申明的时候
linklist test; 改成 linklist test =(linklist)malloc(sizeof(lnode));
以上实例,可以发现我们给test分配了指定大小的内存(sizeof(lnode)),test现在有指向的地址了,现在有意义了,执行代码
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int num;
char name[10];
}lnode,*linklist;
int main()
{
linklist test =(linklist)malloc(sizeof(lnode));
gets(test->name);
printf("%s",test->name);
free(test); // 用完之后记住需要释放内存malloc和free成套实用
system("PAUSE");
return 0;
}