打算画个一两天补下C里面不熟的内容
学习参考:
【1】【C语言】C语言程序设计.浙江大学.翁恺
【2】RUNOOB.COM
学习内容:
- 解释/编译
- 枚举类型 enum
- 定义常量 #define const
- 存储类
auto register static 使用
static 修饰局部变量可以在函数调用之间保持局部变量的值。 static 修饰全局变量时,变量的作用域限制在声明它的文件内。
静态本地变量:函数离开时,继续保持并存在;具有全局的生存期 ,本地的作用域
extern - 字符串:使用 null 字符 ‘\0’ 终止的一维字符数组
- 共用体union:任何时候只能有一个成员带有值
- 可变参数
- 可变数组
#include<stdio.h>
#include<stdlib.h>
#ifndef _ARRAY_H_
#define _ARRAY_H_
#define BLOCK_SIZE 20
typedef struct {
int *array;
int size;
}Array;
Array array_create(int init_size);
void array_free(Array *a);
int array_size(const Array *a);
int* array_at(Array *a,int index);
void array_inflate(Array *a, int more_size);
#endif
Array array_create(int init_size){
Array a;
a.array = (int *)malloc(sizeof(int)* init_size);
a.size = init_size;
return a;
}
void array_free(Array *a){
free(a->array);
a_array = NULL;
a->size = 0;
}
//封装
int array_size(const Array *a){
return a->size;
}
int* array_at(Array *a,int index){
if(index >= a->size){
array_inflate(a, (index/BLOCK_SIZE+1)*BLOCK_SIZE- a->size);
}
return &(a->array[index]);
}
int array_get(const Array *a, int index){
retur a->array[index];
}
void array_set(Array* a, int index, int value){
a->array[index] = value;
}
void array_inflate(Array *a, int more_size){
int *p = (int*)malloc(sizeof(int)*(a->size+more_size));
memcpy(p,a->array,a->size);
free(a->array);
a->array = p;
a->size += more_size;
}
int main(){
Array a = array_create(100);
printf("%d\n",__func__,array_size(&a));
*array_at(&a, 0) = 10;
printf("%d\n",__func__,*array_at(&a, 0));
array_free(&a);
int number, cnt =0;
while(number!=-1){
scanf("%d",&number);
if(number!=-1){
*array_at(&a, cnt++)=number;
}
}
return 0;
}
- 链表
#include<stdio.h>
#include<stdlib.h>
#ifndef _NODE_H_
#define _NODE_H_
typedef struct _node{
int value;
struct _node *next;
}Node;
typedef struct _list{
Node* head;
Node* tail;
}List;
void add(Node** pHead, int number);
void print(List *plist);
#endif
int main(){
int number;
List list;
list.head = NULL;
list.tail = NULL;
do{
scanf("%d", &number);
if(number != -1){
//add to linked-list
head = add(&list, number);
}
}while(number != -1);
//遍历
print(&list);
//删除
int isFound = 0;
scanf("%d", &number);
Node * p;
Node * q;//指向p前一个
for(q=NULL, p = plist->head; p ; q=p, p=p->next){
if(p->value ==number){
if(q){
q->next = p->next;
}else{
list->head = p->next;//**boundary
}
free(p);
break;
}
}
//清除
for(p = plist->head; p ; p=q){
q=p->next;
free(p);
}
return 0;
}
void print(List *plist){
Node * p ;
for(p = plist->head; p ; p=p->next){
printf("%d", p->value);
}
printf("\n");
}
void add(List* pList, int number){
if(pList->head){
pList->head = p;
}else{
Node * p =(Node*)malloc(sizeof(Node));
p->value = number;
p->next = NULL;
pList->tail->next = p;
pList->tail = pList->tail->next;
}
}
- __func__表示当前函数的名字