200815-C指针高级和链表

一、学习的知识点

作业

  1. puts函数:显示字符串,并把末尾的字符串结束符 “\0”替换成换行符“\n”字符输出
  2. 下标越界:char s[5]={“ABCDE”}; char s[5]={‘A’,‘B’,‘C’,‘D’,‘E’};
  3. 野指针:char *s;scanf("%s",s);

指针

//指针的指针:保存指针变量的地址,本质还是指针,通常用在指针数组作为函数参数的时候
char name[20]="admin";
char *ptemp="hello"; //
char *pstr=name;
char **pts; //占用4字节空间,指针数组char *p[10];在形参中用指针的指针表示
pts=&pstr;

//结构体指针,保存结构体的地址。结构体变量作为函数参数的时候,可以使用结构体指针
typedef struct staff
{
	char name[20];
	char pwd[10];
	int id;
	int role; //0-管理员 1-服务员 2-经理

}STAFF_T;

STAFF_T user[3]={{"admin","123456",100113,0},{"waiter","123456",100114,1}, {"manager","123456",100115,2}};
STAFF_T *puser=NULL;
int i;
puser=user; //指向结构体数组
printf("%s\n",(puser+1)->name);
	
//函数指针:本质还是指针,指向函数的指针,存放的是函数的地址
int sum(int a,int b); //函数声明
int (*pfun)(int c,int d)=sum;//函数指针的定义
pfun(4,5); //函数调用
void (*Init[3])={adminInit,managerInit,waiterInit};

//无类型指针可以接收任意类型的指针变量,但是任意类型指针不能直接保存无类型指针,必须进行强制类型转换

const int *pst=&a; //const 修饰指针变量的值(即地址)是可以修改的,但是指针指向地址的内容是不能修改的
int *const pst //pst的指针不能改,(pp=&i;语句错误),但指针指向地址的内容是可以修改的
//const右侧是内容,则内容不能改,右侧是指针,则指针不能改。

在这里插入图片描述

链表

malloc()函数;stdlib.h,允许从空闲内存池中分配内存。函数原型:void *malloc(size_t bytes);size_t byte:要申请的字节数。返回值:成功时返回内存段首地址,否则返回NULL
内存初始化函数:void *memset( void *buffer, char ch, size_t n);string.h参数:buffer是需要设置的内存的开始地址;ch是期望填充的值; n是需要填充的字节数。返回值:成功时返回buffer的首地址,否则返回NULL
free()函数:void free(void *p) p必需是通过malloc、calloc或realloc分配的指针(首地址)
calloc()函数: 存储在已分配的内存空间中的值默认为零。函数原型: void *calloc(size_t num,size_t bytes );size_t num 要分配内存单元的个数。size_t bytes 每个内存单元的字节大小。返回值: 成功时返回内存段首地址,否则返回NULL

typedef struct staff
{
	char name[20];
	char pwd[10];
	int id;
	int role; //0-管理员 1-服务员 2-经理
	STAFF_T *pre
	STAFF_T *pnext
}STAFF_T;
//结构体变量指针-保存地址
STAFF_T *puser=NULL;
puser=(STAFF_T *)malloc(sizeof(STAFF_T)); //开辟内存空间
puser1=calloc(3,sizeof(STAFF_T));
if(puser==NULL) //puser==NULL,开辟失败
{
   return -1}
//开辟成功,进行内存初始化
memset(puser,'\0',sizeof(STAFF_T)*4); //对指针指向的地址开辟空间

//保存数据
puser->ID=1001;
strcpy(puser->name,"admin");
//释放内存空间
free(puser)

二、上课没有听懂或者没有理解的地方

三、当天学习的收获

学习了新技能 链表

四、作业的思路、不会的地方

还未开始

五、其他需要反馈的问题

六、心得体会

关于结点的连接思路还有点陌生,还要捋捋。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值