的大小,如 int型;
变量的作用域:变量的有效性范围,如变量的使用范围;
变量的存储类别:变量在内存中的存储方式,不同的存储方式影响变量在内存中的生存周期。
MMU:虚拟地址单元 解决内存资源稀缺问题
(打印一个地址:打印的都是虚拟的地址)
为了保护数据的安全,操作系统会对空间做划分:
栈空间:局部变量、函数形参、自动变量(调用后释放)
特点:先进后出,管理权限:系统
堆空间:malloc、ralloc、calloc 分配空间
特点:先进先出,管理权限:用户
数据段:bss:保存未初始化的全局变量
rodata:常量
.data(静态数据区):全局变量(程序结束后释放)、static 修饰变量
全局变量与局部变量的区别:
(主要从空间的分配,没有初始化的值 什么时候释放等角度入手)
9、声明与定义:
声明:不分配内存空间,可以声明多次;
定义:分配内存空间,只可以定义一次。
变量的声明有两种情况:
定义性声明:需要建立存储空间的,例如:int a在声明时就已经建立了存储空间;
引用性声明:不需要建立存储空间, 例如:extern int a 其中变量a是在别的文件中定义的。
10、格式化输出与输入:
首先,通过代码来示例以下不同的数据类型的不同的输入输出方法:
[html]view plaincopy
#include
intmain()
{
inti;
intnum;
charch;
floatf_num;
doubled_num;
inta[3];
charsrc[100];
scanf("%d",&num);
printf("num=%d\n",num);
getchar();
scanf("%c",&ch);
printf("ch=%c\n",ch);
scanf("%f",&f_num);
printf("f_num=%f\n",f_num);
scanf("%lf",&d_num);
printf("d_num=%lf\n",d_num);
printf("pleaseinputa[3]:\n");
for(i=0;i<3;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<3;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
scanf("%s",src);
printf("src[100]=%s\n",src);
return0;
} 运行结果:
在获取字符是用一个getchar()清空缓存区
以下是getchar()的作用(转自网络):
1.从缓冲区读走一个字符,相当于清除缓冲区
2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把
这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误
3. getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab) getchar()使用不方便,解决方法:
(1)使用下面的语句清除回车: while(getchar()!='\n');
(2)用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要包含头文件
三种获得字符串的方法:scanf gets getchar
scanf 与 gets 的区别(以下转自网络):
gets(s)函数与 scanf("%s",&s) 相似,但不完全相同,使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认
为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。
1.scanf() 所在头文件:stdio.h
语法:scanf("格式控制字符串",变量地址列表);
接受字符串时:scanf("%s",字符数组名或指针);
2.gets() 所在头文件:stdio.h
语法:gets(字符数组名或指针);
两者在接受字符串时:
1.不同点: scanf不能接受空格、制表符Tab、回车等; 而gets能够接受空格、制表符Tab和回车等;
2.相同点: 字符串接受结束后自动加'\0'。
使用gets获取字符串代码:
[html]view plaincopy
#include
intmain()
{
charsrc[100];
printf("inputastring:");
gets(src);
printf("src=%s\n",src);
return0;
}
使用getchar()获取字符串:
[html]view plaincopy
#include
intmain()
{
charch;
charsrc[10];
inti=0;
while((ch=getchar())!='\n')
{
src[i]=ch;
i++;
if(i==9)
{
printf("error!\n");
exit(1);
}
src[i]='\0';
}
return0;
}
如何让scanf不遇到空格结束呢?
在%前面加空格
详情请戳网址:http://blog.csdn.net/mishifangxiangdefeng/article/details/7163002
(技术大牛写的帖)
获取数组方法:
1、
[html]view plaincopy
#include
intmain()
{
inta[3];
inti;
int*p=a;
for(i=0;i<=2;i++)
{
scanf("%d",p++);
}
p=a;
for(i=0;i<3;i++)
{
printf("a[%d]=%d\n",i,*(p+i));
}
return0;
} [html]view plaincopy
2、 [html]view plaincopy
#include
intmain()
{
inta[3];
inti;
for(i=0;i<=2;i++)
{
scanf("%d",&a[i]);
}
p=a;
for(i=0;i<3;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
return0;
} 3、
[html]view plaincopy
#include
intmain()
{
inta[3];
inti;
for(i=0;i<=2;i++)
{
scanf("%d",a+i);
}
p=a;
for