1.值传递,值返回,地址传递,地址返回
#include
#include
#include
#include
/********************值传递**************/
void swap(int m, int n)
{
int temp;
temp=m;
m=n;
n=temp;
printf("m=%d,n=%d\n",m,n);
}
/********************值传递****************/
void fun(int *p, int *s)
{
int *temp;
temp=p;
p=s;
s=temp;
printf("*p=%d,*q=%d\n",*p,*s);
}
/***********************地址传递**************/
void fun1(int *p, int *s)
{
int temp;
temp=*p;
*p=*s;
*s=temp;
printf("m=%d,n=%d\n",*p,*s);
}
/*******************值返回*******************/
int fun2()
{
int value=100;
return value;
}
/*******************地址返回*****************/
int *fun3()
{
static int value=666;
return &value;
}
/*******************主调函数*****************/
int main(int argc, const char *argv[])
{
int num=520;
int sum=1314;
swap(num,sum);
printf("num=%d,sum=%d\n",num,sum);
fun(&num,&sum);
printf("num=%d,sum=%d\n",num,sum);
fun1(&num,&sum);
printf("num=%d,sum=%d\n",num,sum);
int ret=fun2(); //值返回的函数返回值只能作右值
printf("%d\n",ret);
int *p=fun3(); //地址返回结果既可以作为左值(但是要取*)也可以作为右值
printf("%d\n",*p);
return 0;
}
2.内存的分配和释放
#include
#include
#include
#include
int main(int argc, const char *argv[])
{
//在堆区申请一个int类型的空间大小
int *p1=(int *)malloc(4);
printf("*p1=%d\n",*p1);
int *p2=(int *)malloc(sizeof(int));//申请一个int类型的大小
*p2=520;
printf("*p2=%d\n",*p2);
//连续申请5个int类型的大小
int *p3=(int *)malloc(sizeof(int)*5);
for(int i=0;i<5;i++){
printf("%d\t",*(p3+i));
}
free(p1); //释放堆区空间
p1=NULL; //防止野指针
free(p2);
p2=NULL;
free(p3);
p3=NULL;
return 0;
}
3.要求在堆区申请6个int类型空间存放6名学生的成绩,分别使用函数实现申请空间、输入学生成绩、输出学生成绩、对学生进行升序排序、释放空间
#include
#include
#include
#include
//申请堆区空间
int *fun(int n)
{
int *ptr=(int *)malloc(sizeof(int)*n);
if(NULL == ptr){
printf("申请不成功\n");
return NULL;
}
else{
printf("申请成功\n");
return ptr;
}
}
//输入成绩
void input(int *p, int n)
{
int i;
printf("输入成绩:");
if(NULL != p){
for(i=0;i*(p+j+1)){
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
}
//输出成绩
void output(int *p,int n)
{
int i;
printf("排序成功\n");
for(i=0;i
4.类型重定义
#include
#include
#include
#include
//将无符号短整形重命名为uint16
typedef unsigned short int uint16;
//将int *类型重命名为P
typedef int * P;
//将char []类型重命名为string
typedef char String[10];
int main(int argc, const char *argv[])
{
uint16 a=10;
printf("sizeof a = %ld\n",sizeof(a));
printf("%d\n",a);
P p1=NULL;
printf("sizeof p1 = %ld\n",sizeof(p1));
String s;
strcpy(s,"hello");//将"hello"拷贝给s
printf("s = %s\n",s);
printf("sizeof s = %ld\n",sizeof(s));
printf("strlen s = %ld\n",strlen(s));
return 0;
}
5.给类型起多个名
#include
#include
#include
#include
typedef int * Ptr_i, int32;//int32是一个int类型的重命名
//Ptr_i是int *类型的重命名
int main(int argc, const char *argv[])
{
int32 num;
Ptr_i p;
printf("siziof num = %ld\n",sizeof(num));
printf("siziof p = %ld\n",sizeof(p));
return 0;
}
6.结构体成员访问指针
#include
#include
#include
#include
//声明一个英雄结构体类型
struct Hero
{
char name[20]; //姓名
int Hp; //血量
double speed; //速度
int kill; //人头数
};
//定义一个商品结构体类型
struct shangping
{
char name[20];
char position[50];
double price;
double weight;
}s1={"辣条","湖南",3,200};
int main(int argc, const char *argv[])
{
struct Hero h1={"亚索",650,350,0};
struct Hero h2={.Hp=2000, .speed=1000};
printf("h1.name = %s\n", h1.name);
printf("h1.Hp = %d\n", h1.Hp);
printf("h1.speed = %lf\n", h1.speed);
printf("h1.kill = %d\n", h1.kill);
//在堆区申请一个英雄类型,完成初始化并输出相应的属性
struct Hero *ptr = (struct Hero*)malloc(sizeof(struct Hero));
//给英雄名字赋值
strcpy(ptr->name,"亚瑟");
ptr->Hp = 3000;
ptr->speed = 350;
ptr->kill = 3;
printf("英雄信息为:%s %d %.2lf %d\n", ptr->name, ptr->Hp, ptr->speed, ptr->kill);
printf("请输入name:");
scanf("%s",s1.name);
printf("请输入position:");
scanf("%s",s1.position);
printf("请输入price:");
scanf("%lf",&s1.price);
printf("请输入weight:");
scanf("%lf",&s1.weight);
printf("商品信息:%s %s %.2lf %.2lf\n", s1.name, s1.position, s1.price, s1.weight);
return 0;
}
7.思维导图