思维导图
值传递 地址传递 值返回 地址返回
#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 *q)
{
int *tem;
tem=p;
p=q;
q=tem;
printf("fun-%d %d\n",*p,*q);
}
/***************地址传递****************/
void hun(int *p,int *q)
{
int tem;
tem=*p;
*p=*q;
*q=tem;
printf("hun-%d %d\n",*p,*q);
}
/***************值返回****************/
int gun()
{
int value=666;
return value;
}
/**************地址返回***************/
int *iun()
{
static int value=999;
return &value;
}
int main(int argc, const char *argv[])
{
int num=555;
int key=666;
swap(num,key);//调用swap函数
printf("swap--%d %d\n",num,key);
fun(&num,&key);
printf("fun--%d %d\n",num,key);
hun(&num,&key);
printf("hun--%d %d\n",num,key);
//gun()=999;
printf("gun=%d\n",gun());
int *ptr=iun();//地址返回的结果可以作为右值
*iun()=555;//地址返回的结果可以作为左值
printf("*ptr=%d *iun=%d\n",*ptr,*iun());
return 0;
}
内存分区
#include
#include
#include
int m;//.bss
int n=520;//.data
static int k; //.bss
static int l=666;//.data
char arr[100]="hello world";//arr .data,hello .ro
char *p="hello";//*p .data hello .ro
int main(int argc, const char *argv[])
{
int a;//栈区
double b=999;//栈区
static int c;//.bss
static int d=520;//.data
char *q="hihi";//.栈区 8字节 hihi 值 .ro
char e[100]="hell o";//栈区 hello.ro
int *ptr =(int *)malloc(sizeof(int));//ptr 栈区 ,申请的空间在堆区
return 0;
}
动态内存的分配和回收
#include
#include //malloc所在的头文件
#include
int main(int argc, const char *argv[])
{
//在堆区申请一个int空间大小
int *p1=(int *)malloc(4);//4字节
printf("*p1=%d \n",*p1); //随机值
int *p2=(int*)malloc(sizeof(int));//申请int类型大小
*p2=520;
printf("*p2=%d\n",*p2);//520
int *p3=(int *)malloc(sizeof(int)*5);//连续申请5个int类型大小
//输出默认的值
for(int i=0;i<5;i++)
{
printf("%d\t",p3[i]);
printf("%d\t",*(p3+i));
}
free(p1);//释放堆区空间
free(p2);
free(p3);
p1=NULL;//防止野指针
p2=NULL;
p3=NULL;
return 0;
}
在堆区申请6个int类型空间存放6名学生的成绩,分别使用函数实现申请空间输入学生成绩输出学生成绩对学生成绩进行升序排序释放空间
#include
#include
#include
//判断是否成功申请堆区
int *me(int num)
{
int *p1=(int *)malloc(sizeof(int)*num);
if(NULL==p1)
{
printf("申请失败");
}
else
{
printf("申请成功\n");
return p1;
}
}
//定义输入函数,p表示指向堆区空间的地址。
void input(int *p)
{
int i;
if(NULL !=p)
{
for(i=0;i<6;i++)
{
scanf("%d",p+i);
}
}
}
//进行冒泡排序
void px(int *p,int n)
{
int i,j;
for(i=1;i*(p+j+1))
{
int m=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=m;
}
}
}
}
//释放堆区
void freem(int *p)
{
free(p);
p=NULL;
}
//输出结果
void sc(int *p2)
{
int i;
for(i=0;i<6;i++)
{
printf("%d ",*(p2+i));
}
}
int main(int argc, const char *argv[])
{
int *p=(int *)malloc(sizeof(int)*6);
int i,j;
int *p2=me(6);
input(p2);//调用输入函数
px(p2,6);//调用冒泡函数
sc(p2);//输出结果
putchar(10);
freem(p2);//释放空间
return 0;
}
类型重定义实列
#include
#include
#include
typedef unsigned long int uint64;//将无符号长整形重命名为uint16
typedef int * Ptr_i;//将int*类型重命名为Ptr_i
typedef char String[10];//将char [5]重名为String
int main(int argc, const char *argv[])
{
uint64 num=520;//等价于 unsigned long int uint64
int i=9;
Ptr_i p=&i;//等价于 int *p=&i;
printf("sizeof num=%ld\n",sizeof(num));//8
String s1;
strcpy(s1,"hello");
puts(s1);
printf("sizeof s1=%ld\n",sizeof(s1));//10
printf("strlen s1=%ld\n",strlen(s1));//5
printf("%d\n",*p);//9
return 0;
}
结构体的定义以及初始化
#include
#include
#include
//声明一个英雄结构体
struct Hero
{
char name[20];
int Hp;
double speed;
int kill;
}h3={"小花狗",200,1000,1};//
struct //
{
char name[40];
char position[40];
double price;
double weight;
}g1={"奶粉","中国",10,500};
//定义一个商品类型
struct Sp
{
char name[20];
char position[20];
double price;
double weight;
};//s1={"奶粉","中国",10,500};
int main(int argc, const char *argv[])
{
struct Hero h1 ={"岩狗狗",1000,50,0};//定义一个英雄变量h1
struct Hero h2 ={.Hp=2000,.speed=80};//Hero h2
// h1所有内容
printf("h1.name=%s\n",h1.name);
printf("h1.Hp=%d\n",h1.Hp);
printf("h1.speed=%lf\n",h1.speed);
printf("h1.kile=%d\n",h1.kill);
//
struct Sp s1={};
scanf("%s",s1.name);
scanf("%s",s1.position);
scanf("%lf",&s1.price);
scanf("%lf",&s1.weight);
//在堆区申请一个英雄类型,完成初始化并输出相应的属性
struct Hero *ptr=(struct Hero*)malloc(sizeof(struct Hero));
strcpy(ptr->name,"亚瑟");
ptr->Hp=3000;
ptr->kill=3;
ptr->speed=350;
printf("英雄信息%s %d %lf %d\n",ptr->name,ptr->Hp,ptr->speed,ptr->kill);
printf("商品信息:%s %s %.2f %.2f\n",s1.name,s1.position,s1.price,s1.weight);
return 0;
}