重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
一.在c中内存分为这几个存储区
创新互联公司是一家专注于成都做网站、网站设计与策划设计,朝阳网站建设哪家好?创新互联公司做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:朝阳等地区。朝阳做网站价格咨询:18980820575
1.栈 - 有编译器自动分配释放
2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放
4.另外还有一个专门放常量的地方。 - 程序结束释放
main函数是程序的入口点,main有自己的堆栈 频繁的调用主函数,会进入死循环,最后死掉,因为main()函数是死循环的 是没有返回的
直接调用main主函数是允许的,只是要注意函数返回的条件,防止进入死循环。但是绝不提倡。
#include"stdio.h"
#include"string.h"
struct account
{
char name[20];
int money;
}accounts;
void plm()
{
printf("您账户的余额:%d",accounts.money);
}
void qwe()
{
int cunkuan;
printf("请输入存款金额:");
scanf("%d",cunkuan);
accounts.money=cunkuan+accounts.money;
printf(" 存款成功!\n账户余额:%d\n",accounts.money);
}
void poi()
{
int qukuan,i;
printf("请输入取款金额:");
while(1)
{
scanf("%d",qukuan);
if(accounts.moneyqukuan)
{
printf("账户余额不足!你的账户余额:%d\n请重新输入:",accounts.money);
}
else
{
accounts.money=accounts.money-qukuan;
printf("取款成功!\n账户余额:%d\n",accounts.money);
break;
}
}
}
void main()
{
char name[20];
char mima[20];
int q;
printf("====================================================\n");
printf("====================================================\n");
printf("==================欢迎你使用银行系统================\n");
printf("====================================================\n");
printf("====================================================\n\n");
printf("请输入你的账户名:");
gets(name);
printf("请输入密码:");
gets(mima);
printf("\n");
if(strcmp(name,"zengxin")==0strcmp(mima,"12345")==0)
{
printf("登陆成功!\n");
int t=1;
while(t)//主函数加上一个while循环就好了,t表示是否继续使用系统,选择0时,t=1,即可退出系统了
{
printf(" 1 存款 2 取款 3 开户\n");
printf(" 4 销户 5 查询 0 退出\n请选择:");
scanf("%d",q);
switch (q)
{
case 1:
{
qwe();
break;
}
case 2:
{
poi();
break;
}
case 3:
break;
case 4:
break;
case 5:
{
plm();
break;
}
case 0:
{
t=0;
break;
}
}
}
}
else
printf("输入的账户名和密码错误!!");
假如有一函数f, 没有参数, 则要这样调用:
f();
其中, f是函数f的函数名, 但对于编译器来讲, f是一个地址, 它指向了f函数代码段的开头部分.而()是一个运算符, 它非常类似于*, 但是*是取值的, 而()是让程序跳转到f处执行程序. 最后的那个分号就是标识着一个语句的结束
如果f有一个整型的参数, 那么需要这样调用:
f(1);
只是多了一个1, 这个1就是()运算符要复制到f函数的栈中了, 准确地说是复制到它的形参中.
如果f有多个参数, 则只需要在每个形参之间打上逗号:
f(1, 2, 3);
逗号只是用来起分隔作用.
主函数里调用就像写函数定义一样,比如调用创建表的,就这样:
#include stdio.h
struct Linklist {
...
};
typedef Linklist* LinkList;
int CreateList(LinkList LstMe) {
...
}
int main() {
LinkList LstDemo = (LinkList) malloc (sizeof(Linklist));
CreateList(LstDemo); // 调用建表
free (LstDemo);
return 0;
}
可以的,但最好提供长度参数,并且不要用0判断是否有效数字(因为0本身可能就是有效数字)
#include stdio.h
#include malloc.h
#include memory.h
int f(int* a,int l,int n,int i) //a:源数组 l:a有效数字长度,n:插入的数字,i,位置
{
int *b=(int*)malloc(sizeof(int)*(l-i-1)); //临时数组b
memcpy(b,a+i,(l-i-1)*sizeof(int)); //把a[i]开始的数据复制到b;
a[i]=n;
memcpy(a+i+1,b,(l-i-1)*sizeof(int));//复制回来
free(b);
return 0;
}
int main()
{
int a[9]={1,2,3,4,5};
int i;
f(a,6,8,2); //可以用各种办法获得第二个参数,或者直接就给数组的总长度
for(i=0;i6;i++)
{
printf("%d ",a[i]);
}
return 0;
}