#include
#include
#include
int *space(int num) //函数space用来申请num个字节的空间
{
int *p=(int *)malloc(sizeof(int)*num); //用malloc申请空间
return p; //返回申请的空间地址
}
int get(int *p) //函数get 用来输入学生的成绩
{
int i; //定义了循环变量i
printf("请输入学生的成绩\n"); //终端提示信息
for(i=0;i<6;i++) //for循环
{
scanf("%d",(p+i)); //输入学生成绩
}
}
int out(int *p) //函数out 用来输出学生的成绩
{
int i;
printf("输出学生成绩\n");
for(i=0;i<6;i++)
{
printf("%-3d",p[i]); //输出学生成绩
}
putchar(10); //换行
}
int up(int *p) //函数up 用来实现冒泡排序进行的升序
{
int i,j;
int temp;
for(i=1;i<6;i++) //外层循环控制判断的次数
{
for(j=0;j<6-i;j++) //内存循环判断比较的次数
{
if(p[j]>p[j+1])
{
temp=p[j];
p[j]=p[j+1]; //三杯水交换
p[j+1]=temp;
}
}
}
}
int myfree(int *p) //函数myfree用来释放自己手动申请的堆区空间
{
if(p!=NULL) //判断指针指的是不是空地址 如果是就结束,如果不是空地址就让指针指向空地址 防止野指针
{
free(p); //free函数释放空间
p=NULL;
}
}
int main(int argc, const char *argv[])
{
int num; //定义要输入的学生个数
scanf("%d",&num);
int *p=space(num); //指针p来指向申请的空间地址
get(p); //调用输入学生成绩函数
up(p); //调用冒泡升序函数
out(p); //调用输出学生成绩函数
myfree(p); //调用释放手动申请的堆区空间的函数
p=NULL; //防止p成为野指针
return 0;
}
#include
#include
#include
int main(int argc, const char *argv[])
{
int *p1=(int *)malloc(4); //向堆区申请了四个字节的空间并用指针p1指向
printf("*p1=%d\n",*p1); //输出p1的内容 随机值
int *p2=(int *)malloc(sizeof(int)); //向堆区申请了一个int类型数据大小的空间并用指针p2指向它
*p2=25; //让p2指向的地址内的内容等于25
printf("*p2=%d\n",*p2); //输出p2保存的地址内的值 25
int *p3=(int *)malloc(sizeof(int)*5); //向堆区申请了五个int类型数据大小的空间并用指针p3指向它
for(int i=0;i<5;i++) //for 循环
{
printf("%d\t",*(p3+i)); //输出p3保存的地址内的值 是随机值
}
printf("\n"); // 换行
free(p1); //手动释放p1指向的地址的空间
p1=NULL; //p1指针还在防止它野指针
free(p2);
p2=NULL;
free(p3);
p3=NULL;
return 0;
}
#include
#include
#include
int main(int argc, const char *argv[])
{
int a; //定义普通变量
int *p; //定义指针类型变量
int arr[3]; //定义数组类型变量
int *p[3]; // 定义指针数组
int (*p)[3]; //定义数组指针变量
int (*p)(int,int); //定义函数指针变量
int (*p[3])(int.int); //定义函数指针数组的指针变量
int **p; //定义二级指针
return 0;
}
#include
#include
int main(int argc, const char *argv[])
{
int ; //定义普通数据类型
int *; //定义指针类型
int [3]; //定义数组类型
int *[3]; // 定义指针数组
int (*)[3]; //定义数组指针
int (*)(int,int); //定义函数指针
int (*[3])(int.int); //定义函数指针数组的指针
int **; //定义二级指针
return 0;
}
#include
#include
int main(int argc, const char *argv[])
{
typedef int A; //重定义普通变量
typedef int *P; //重定义指针类型变量
typedef int ARR[3]; //重定义数组类型变量
typedef int *P[3]; // 重定义指针数组
typedef int (*P)[3]; //重定义数组指针变量
typedef int (*P)(int,int); //重定义函数指针变量
typedef int (*P[3])(int.int); //重定义函数指针数组的指针变量
typedef int **P; //重定义二级指针
return 0;
}
#include
#include
#include
int m; //未初始化的全局变量,在全局区的.bss段
int n = 5; //已初始化的全局变量,在全局区的.data段
static int k; //未初始化的静态变量,在全局区的.bss段
static int l = 26; //已初始化的静态变量,在全局区的.data段
char arr[30] = "hello world"; //arr数组在全局取的.data段,而"hello world"在.ro段
char *p = "hello"; //指针在.data段,而“hello”在.ro段
int main(int argc, const char *argv[])
{
double b = 29.01; //局部变量在栈区申请
int a; //局部变量,在栈区申请,初始值为随机值
static int c; //静态局部变量,在全局区的.bss段申请
static int d = 12; //静态局部变量,在全局区的.data段
char *q = "nihao"; //q在栈区申请的8字节,但是"nihao"在全局区的.ro段
char e[30] = "hello world"; //数组在栈区申请,"hello world"在全局区的.ro段
int *ptr = (int *)malloc(sizeof(int)); //ptr是在栈区,而申请的空间在堆区
return 0;
}
#include
#include
#include
typedef unsigned short int uint16; //将无符号短整形重命名为uint16
typedef int * Ptr_i; //将int*类型重命名为Ptr_i
typedef char String[10]; //将char [5]类型重命名为String
int main(int argc, const char *argv[])
{
uint16 num = 520; //等价于unsigned short int num = 520
printf("sizeof num = %ld\n", sizeof(num)); //2
printf("num = %d\n", num); //520
Ptr_i p1 = NULL; //此时p1是指针变量 int *p1;
printf("sizeof p1 = %ld\n", sizeof(p1)); //8
String s1; //此时是定义的长度为10的字符数组
strcpy(s1, "hello");
printf("s1 = %s\n", s1); //hello
printf("sizeof s1 = %ld\n", sizeof(s1)); //10
printf("strlen s1 = %ld\n", strlen(s1)); //5
return 0;
}
#include
typedef int *Ptr_i, int32; //int32是一个int类型的重命名
//Ptr_i是int*类型的重命名
int main(int argc, const char *argv[])
{
int32 num; //num是一个普通变量
Ptr_i p; //p是一个int×类型的变量
printf("sizeof num = %ld\n", sizeof(num)); //4
printf("sizeof p = %ld\n", sizeof(p)); //8
return 0;
}
#include
struct Hero //声明一个英雄结构体类型
{
char name[20]; //姓名
int Hp; //血量
double speed; //基础位移
int kill; //人头数
}h3 = {"亚瑟", 2800, 450, 5};
int main(int argc, const char *argv[])
{
//使用英雄类型定义一个英雄变量
struct Hero h1 = {"亚索", 650, 350, 0}; //此时定一个英雄变量h1
//定义英雄变量,指定某个成员进行赋值
struct Hero h2 = {.Hp=2000, .speed = 1000};
return 0;
}
#include
#include
#include
struct Hero
{
char name[20]; //姓名
int Hp; //血量
double speed; //基础移速
int kill; //人头数
};
struct Thing
{
char name[20]; //商品名称
char position[20]; //商品产地
double price; //单价
float weight; //重量
};
int main(int argc, const char *argv[])
{
struct Thing s;
scanf("%s",s.name); //输入商品名字
scanf(" %s",s.position); //输入商品产地
scanf(" %lf",&s.price); //输入商品价格
scanf(" %f",&s.weight); //输入商品重量
printf("商品名称:%s\n",s.name); //输出商品名字
printf("商品产地: %s\n",s.position); //输出商品产地
printf("单价:%lf\n",s.price); //输出商品价格
printf("重量:%lf\n",s.weight); //输出商品重量
return 0;
}
2、思维导图