编程中的变量与常量

关于变量与常量的定义:变量:代表内存中具有特定属性的一个储存单元,它用来存放数据,也就是变量的值,在程序运行期间,这些值是可以改变的。常量:在程序运行期间,其值不能改变的... 关于变量与常量的定义:
变量:代表内存中具有特定属性的一个储存单元,它用来存放数据,也就是变量的值,在程序运行期间,这些值是可以改变的。
常量:在程序运行期间,其值不能改变的量。
首先变量与常量都需要内存去储存,本质就是变与不变罢了。用C语言编写程序求园的面积S=2*P*r*r(P为圆周率)。
有常量:
#define P 3.140000
#include <stido.h>
main()
{
int r,S;
printf("请输入半径r:");
scanf("%d\n",r);
S=2*P*r*r;
printf("面积S为:%S");
}
无常量:
#include <stido.h>
main()
{
int r,P=3.140000,S;
printf("请输入半径r:");
scanf("%d\n",r);
S=2*P*r*r;
printf("面积S为:%S");
}
其中P的值我一直没改变,他们同样能达到预期的目的。既然变量的本质只是变与不变为什么每一种语言都要设立变量与常量(多余的量),编程时只要注意不要给变量(常量)赋予其他的值不就行了吗,同样可以在最初的修改赋予语句中的变量(常量)达到改“一处动全局的效果”。
难道他们在运行时在内存中还有其他的不同吗?
还有什么我没注意到的细节(运行的时间有差别)?
对 wsmygg的回答评价:“你怎么能用int来为P来赋值呢?它是整型的呀,应该用实型float型或者double型的呀~ ”,你找出错误我感谢你,但程序中的错误不是我问题关键。
我问的是:变量与常量的本质。
展开
 我来答
getborn
推荐于2016-08-15 · TA获得超过964个赞
知道小有建树答主
回答量:337
采纳率:0%
帮助的人:463万
展开全部
看完要加分啊.

其实常量有几种, 因为他们的值不能被改变而都叫常量, 但他们是有很大区别的, 因为他们的作用完全不一样.

至于他们的本质区别分几情况.平常定义的变量一般是放在栈或静态区上, 也就是你说的内存中的一个特定的存储区域.

1.宏定义的"常量".就是你的程序里的

#define P 3.14

这个不是跟平常的变量一起存放在栈上, 这个是一个宏, 编译器编译前会将你的代码中所有的P替换为3.14, 所以你的程序在运行时是没有地方存放P这个常量的, 而3.14会跟你的其他可执行代码一起放在内存当中.所以宏定义的"常量"可以说不算一个量了.

2.C++的const定义的"常量", 例如

const int a = 2;

这个a是跟平常的变量一样放在栈上, 只不过编译器在编译时会加一个安全检查, 如果你的代码有显式修改a的地方, 就会报一个编译错误. 但是你还是可以在运行时通过其他方式修改a的值.所以const定义的量跟平常的变量没有什么区别.

3.字符串常量

char* p = "text";

p确实是一个变量, 但其指向的"text"即不放在栈上也不放在代码里,它放在一个专门的静态区域, 如果你修改它的值(不是修改p的值), 会造成内存错误. 所以字符串常量又跟上面两种不一样.

比如下面的程序:

#define P 3.14
main()
{
char* s = "text";
const double a = P;
}

它的内存分布如下:
*******************************
| 静态存储区 |
| "text" |
*******************************
| 栈 |
| s a |
*******************************
| 代码域 |
| char* s = ...|
| const double a = 3.14; |
*******************************

============================================================

这正好就是你说的时间的区别, 但注意不是"运行的时间", 而是他作为"常量"的时间. 从源代码到可执行程序的过程中, #define的常量是在编译前所进行的处理中作为常量(也就是预处理), const是在编译当中作为常量, 而字符串常量则是在运行时无法修改了.

------------------------------------------------------------

至于你说的常量没用是不正确的.我只说上面前两种"常量".

1.#define宏定义的"常量".在多文件的情况下, 普通的变量在第一个文件中定义后又要在其他文件中重新声明, 显然没有宏方便.而且如果用变量的话在它的所有有效区都可以被修改, 肯定是不安全的.另外宏也更直观, 比变量更容易维护.

2.const定义的常量.这种常量一般是为了防止程序员误修改不能被修改的值.特别是一个人写的程序给另外一个人用时, 比如一个字符串, 或一个类的成员.
enginexpert
2009-01-08 · TA获得超过1204个赞
知道小有建树答主
回答量:187
采纳率:80%
帮助的人:56.7万
展开全部
编程中的变量就是可以重新赋值的变量。而常量一般前面用const关键字指定,即改变量是只读的,名为变量其实不变,或者在一定的区域内不可变。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qduwg
2009-01-07 · TA获得超过386个赞
知道小有建树答主
回答量:324
采纳率:85%
帮助的人:45万
展开全部
你前面的例子是一个符号常量,可读性强,后面的是变量,p可以重新赋值的。其实真正的常量是类似“123”,‘a',这样的一些原始值而已。不要弄混了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0557c63a8
2009-01-07
知道答主
回答量:24
采纳率:100%
帮助的人:5.5万
展开全部
你怎么能用int来为P来赋值呢?它是整型的呀,应该用实型float型或者double型的呀~
#define P 3.140000
#include <stido.h>
main()
{
int r,S;
printf("请输入半径r:");
scanf("%d\n",r);
S=2*P*r*r;
printf("面积S为:%f",S);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yczrs001
2009-01-07 · TA获得超过141个赞
知道小有建树答主
回答量:298
采纳率:100%
帮助的人:106万
展开全部
变量可以在人机接口上修改,而常量你在程序里可以改,但是无法应用与实践。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式