一、学习的知识点
作业
- puts函数:显示字符串,并把末尾的字符串结束符 “\0”替换成换行符“\n”字符输出
- 下标越界:char s[5]={“ABCDE”}; char s[5]={‘A’,‘B’,‘C’,‘D’,‘E’};
- 野指针: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)
二、上课没有听懂或者没有理解的地方
无
三、当天学习的收获
学习了新技能 链表
四、作业的思路、不会的地方
还未开始
五、其他需要反馈的问题
无
六、心得体会
关于结点的连接思路还有点陌生,还要捋捋。