第五次课 栈、方法调用与传参


每个独立运行的程序都是自己独占一片内存区域且互不影响,程序占用内存空间是申请一个或多个非常大的数组,如果是多个要关联起来。
每个程序都占的内存比较大,其中分成多个小小的内存,被不同的子程序占用。

struct AA
{
}
struct BB
{
}
void m4()
{
}
void m1()
{
}
void m2()
{
m1();
}
void m3()
{
m2();
}
int main()
{
int a=9;
int b=10;
if(a<b)
{
int c=88;
if(c>80)
{
int d=44;
}
//d在这里报错
}
m2();
m3();
//a在这里报错,超过区域(大括号)会报错。
return 0;
}

在这里插入图片描述
方法之间的传参

#include <stdio.h>
void m2(int *w1,int *w2)
{ 
	*w1=20;
	w2[2]=99;
}
void m1(int x1,int *x2,int* x3)//方法的入参和在方法体里面声明的变量没有什么区别
{
	x1=1;//改变不了
	*x2=2;//传的引用可以改变
	x3[0]=11;
	x3[1]=33;//传的数组可以改变

	m2(x2,x3);//注意这两处的不同
}
int main()
{
	int a=10;
	int b=20;
	int c[5]={1,2,3,4,5};//一维数组传参的时候会按照指针类型去接收
	m1(a,&b,c);//注意这两处的不同
	printf("a=%d,b=%d,c[0]=%d,c[1]=%d,c[2]=%d",a,b,c[0],c[1],c[2]);
	return 0;
}

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
typedef struct AA
{
	int a;
	char b;
	struct AA* c;//struct AA c;不可以,嵌套它自己会报错。
	struct AA* cc;
}A;
typedef struct BB
{
	int a;
	A* b;
	A d;
	struct BB* c;
}B;
void m1(A s1,A* s2,A* s3)//在c++中入参可以A &s1,用这样传参,但是在c语言中不允许。
{
	
}
void k1(int w1[4],int *w2)
{
	printf("%d %d\n",sizeof(w1),sizeof(w2));
}
int main()
{
	A x1,x2,x3;
	x1.a=11;
	x1.b='@';
	x2.a=33;
	x2.b='#';
	
	A* w1=(A*)malloc(sizeof(A));
	w1->a=123;
	w1->b='w';
	
	//下面这种类型是被允许的,因为里面的三个类型都是int
	int e1=22,e2=55;
	int* e3=(int*)malloc(sizeof(int)*3);
	e3[0]=e1;//这里其实给的地址,但地址也是数字,其实是被允许的,e3 0和1的位置存的不是22和55,而是其对应的地址
	e3[1]=e2;
	e3[2]=e1;
	
	/*
	//下面这种不被允许,因为w2指向了三个A类型的数据,而不是他们的地址。
	A* w2=(A*)malloc(sizeof(A)*3);
	w2[0]=x1;//相当于类型不匹配,等号左边是A类型数据,等号右边是int类型指针。
	w2[1]=&x2;
	w2[2]=&x3;
	return 0;
	*/
	A* w2=(A*)malloc(sizeof(A)*3);
	w2[0]=x1;
	w2[1]=x2;
	w2[2]=x3;
	m1(x1,w2,w1);
	m1(x2,w1,w2);
	int m1[]={1,2,3,4};
	A m2[]={x1,x2,x3};
	printf("%d,%d",sizeof(m1),sizeof(m2));
   /*
	typedef struct AA
{
	int a;
	char b;
	struct *AA c;
}A;
    这种情况下输出是16,48;也就是说一个结构体占16字节,这样看起来struct *AA c;创建的c占11字节,但其实它只占8字节。
	
	typedef struct AA
{
	int a;
	char b;
	struct *AA c;
	struct *AA cc;
	
}A;
    这种情况下输出是16,72;也就是说一个结构体占24字节,印证了上面的想法;
	*/
	k1(m1,m1);//这里执行k1之后输出8 8,也就是说在传参过程中数组是指针;也就是说如果传过来是数组无法计算其大小。int类型可以数组第一个元素用来存大小
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值