一、typedef 给类型重命名
#include <stdio.h>
typedef char INT8;
typedef short INT16;
typedef int INT32;
typedef long INT64;
typedef unsigned char UINT8;
typedef unsigned short UINT16;
typedef unsigned int UINT32;
typedef unsigned long UINT64;
(1)结构体的重命名
struct _Student
{
};
typedef struct _Student Student;
typedef struct _node
{
int a;
int b;
}Node;
(2)函数指针
int add(int a, int b)
{
return a+b;
}
int mul(int a, int b)
{
return a*b;
}
int show(int a, int b, int c)
{
return a+b;
}
typedef int (*PFUNC)(int a, int b);
int main()
{
int a = 10;
INT32 b = 20;
struct _Student s;
Student s1;
struct _node n1;
Node n2;
int (*p1)(int a, int b) = add;
PFUNC p2 = add;
// PFUNC p3 = show; 不对 函数类型不匹配
PFUNC p4 = mul;
printf ("1 + 2 = %d\n", add(1,2));
printf ("1 + 2 = %d\n", p1(1,2));
printf ("1 + 2 = %d\n", p2(1,2));
printf ("3 * 4 = %d\n", p4(3,4));
return 0;
}
二、栈大小测试
#include <stdio.h>
// #define NUM 1024*1024*7
int a;
int b;
int c = 10;
int main()
{
//char data[NUM+1000] = {0};
//data[NUM-1+1000] = 12;
//printf ("num = %d\n", data[NUM-1+1000]);
return 0;
}
三、malloc:在堆上分配空间
void *malloc(size_t size);
参数:要分配的空间大小,单位是字节
返回值:如果分配成功指向分配的空间的指针; 如果分配空间失败,返回NULL
free: 释放堆上的空间
void free(void *ptr);
参数:指向要释放的空间的指针
1、分配单个变量空间
int main()
{
// 分配一个 int 型变量
int *pa = (int*)malloc(sizeof(int)/sizeof(char));
if (NULL == pa)
{
printf ("空间分配失败\n");
}
printf ("释放前: %p\n", pa);
free(pa); // 释放空间
printf ("释放后: %p\n", pa);
pa = NULL;
free(pa);
return 0;
}
2、分配一维数组 int a[10]
int main()
{
int *pa = (int*)malloc(sizeof(int)/sizeof(char)*10);
if (NULL == pa)
{
printf ("空间分配失败\n");
}
int i;
for (i = 0; i < 10; i++)
pa[i] = i;
for (i = 0; i < 10; i++)
{
printf ("pa[%d] = %d\n", i, pa[i]);
}
free(pa);
return 0;
}
3、分配二维数组 int a[3][4]
int main()
{
// 分配连续的空间
int (*pa)[4] = (int (*)[4])malloc(sizeof(int)/sizeof(char)*3*4);
if (NULL == pa)
{
printf ("空间分配失败\n");
}
pa[1][2] = 10;
free(pa);
return 0;
}
int main()
{
int **p = (int **)malloc(sizeof(int*)/sizeof(char)*3);
if (NULL == p)
{
printf ("申请空间失败\n");
}
int i;
for (i = 0; i < 3; i++)
{
p[i] = (int *)malloc(sizeof(int)/sizeof(char)*4);
if (NULL == p[i])
;
}
for (i = 0; i < 3; i++)
{
free(p[i]);
}
free(pa);
return 0;
}
四、内存错误
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student
{
int id;
char *name;
}Student;
typedef struct teacher
{
int id;
char name[20];
}Teacher;
int main1()
{
Student *ps = (Student*)malloc(sizeof(Student)/sizeof(char));
if (NULL == ps)
{
printf(“申请空间失败\n”);
}
ps->id = 10;
ps->name = (char*)malloc(sizeof(char)*20);
strcpy(ps->name, "小明");
printf ("id = %d, name = %s\n", ps->id, ps->name);
Teacher *pt = (Teacher*)malloc(sizeof(Teacher)/sizeof(char));
if (NULL == pt)
{
printf(“申请空间失败\n”);
}
pt->id = 20;
strcpy(pt->name, "小红");
printf ("id = %d, name = %s\n", pt->id, pt->name);
return 0;
}
int main()
{
char *buf = "hello world";
int len = strlen(buf);
// 字符串要预留 \0 的空间
char *ps = (char*)malloc(sizeof(char)*(len+1));
strcpy(ps, buf);
printf("%s\n", ps);
return 0;
}