C变量声明

ttssrs 2011-01-02 06:26:05
int a = 25;与int a; a = 25;有何不同?
如果在声明中包含有const关键字,他们完成任务的方式又有什么不同?
...全文
254 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
prohibit 2011-01-16
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ttssrs 的回复:]

引用 15 楼 prohibit 的回复:
C/C++ code
int a = 25;//定义a并初始化为25,访问a的时候其值为25
int a;//未初始化,如果在对a赋值前(a = 25;)访问a,则所得a值是随机的值,建议最好还是初始化
a = 25;

int const a = 25;//a是一个只读常量、值为25,不可修改其值
int const a;//a必须要给……
[/Quote]常量必须初始化~~否则报错~~
乐CC 2011-01-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 johnpher 的回复:]
int a = 25; //在声明的时候完成了初始化,即变量a在产生的时候值就为25

int a; a = 25;//先声明,后初始化,即变量a在产生的时候为随机值,然后将其赋为25

//如果在声明中包含有const关键字,说明它是静态变量,不能被赋值。
[/Quote]
按照汇编来理解(如果编译器没有优化的话,有部分编译器是在使用时才分配栈空间的,那两种就是一样了),第二种是先预留栈空间,即申明,有一个入栈操作,然后是用栈偏移进行赋值,第一种是直接立即数入栈,效率的话还不太清楚,来个高人解答下。
wizard_tiger 2011-01-03
  • 打赏
  • 举报
回复
const 声名一个常量
int a=25; //这个是初始化
int a;a=25;//这个是赋值
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 prohibit 的回复:]
C/C++ code
int a = 25;//定义a并初始化为25,访问a的时候其值为25
int a;//未初始化,如果在对a赋值前(a = 25;)访问a,则所得a值是随机的值,建议最好还是初始化
a = 25;

int const a = 25;//a是一个只读常量、值为25,不可修改其值
int const a;//a必须要给初值,否则没意义
a = 25;//不能对a进……
[/Quote]
ttssrs 2011-01-03
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 prohibit 的回复:]
C/C++ code
int a = 25;//定义a并初始化为25,访问a的时候其值为25
int a;//未初始化,如果在对a赋值前(a = 25;)访问a,则所得a值是随机的值,建议最好还是初始化
a = 25;

int const a = 25;//a是一个只读常量、值为25,不可修改其值
int const a;//a必须要给初值,否则没意义
a = 25;//不能对a进……
[/Quote]

不能先用const定义,然后赋值吗?
derest12 2011-01-03
  • 打赏
  • 举报
回复
受教了,呵呵,const的用法还真没用过呢
prohibit 2011-01-03
  • 打赏
  • 举报
回复
int a = 25;//定义a并初始化为25,访问a的时候其值为25
int a;//未初始化,如果在对a赋值前(a = 25;)访问a,则所得a值是随机的值,建议最好还是初始化
a = 25;

int const a = 25;//a是一个只读常量、值为25,不可修改其值
int const a;//a必须要给初值,否则没意义
a = 25;//不能对a进行修改
jibcy 2011-01-03
  • 打赏
  • 举报
回复
各位总结的不错,学习!!
liumu1209 2011-01-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 void_wuyu 的回复:]

引用 5 楼 johnpher 的回复:
int a = 25; //在声明的时候完成了初始化,即变量a在产生的时候值就为25

int a; a = 25;//先声明,后初始化,即变量a在产生的时候为随机值,然后将其赋为25

//如果在声明中包含有const关键字,说明它是静态变量,不能被赋值。

按照汇编来理解(如果编译器没有优化的话,有部分编译器是在使用时才分配栈空间的,那……
[/Quote]
厉害
rjianfeili 2011-01-02
  • 打赏
  • 举报
回复
前一个是声明变量的时候就有赋初值了(初始化)
后一个先声明,也就是先申请内存空间,在往该内存空间写值

const修饰变量,表示这个东西是个常量,其值不能修改了,也就是说,const修饰的变量应该是在声明的时候就初始化(赋初值),否则是无意义的。编译器对这种类型的变量在分配其内存的时候是放到只读内存区域的
flysnowhite 2011-01-02
  • 打赏
  • 举报
回复
如果是定义常量,必须在定义同时进行初始化,因为常量本身的值是不能改变的。如果定义时没有初始化,后面再进行赋值,不符合常量的定义;这时会报一个编译错误。
nwpucoder 2011-01-02
  • 打赏
  • 举报
回复
还是有区别的
int a = 25; 算是拷贝 的初始化
int a(25);正常的初始化 不过很少使用
extern int a ; 只是声明一个变量 还可以用于多文件件公用 不分配内存空间
flysnowhite 2011-01-02
  • 打赏
  • 举报
回复
定义同时赋初值成为初始化。另一种方式是先定义,然后赋值。
对于基本数据类型,如整型、浮点型、字符型,这两种方式没有什么不同。
而对于数组、结构体,这两种是有区别的,初始化效率高。
数组只能在定义时进行初始化;由于数组名本身是个地址常量,不能进行整体赋值。所以如果先定义数组,再赋值,只能对数组里的每个元素进行循环赋值。
结构体也可以在定义时初始化;如果是先定义,后赋值,只能把结构体作为一个整体,用同种类型的结构体进行赋值,这时采用的是位拷贝;不能对结构体里的成员进行总体赋值。
如果是C++,处理更加复杂,就不多说了。
JiangXiang 2011-01-02
  • 打赏
  • 举报
回复
int a = 25; //在声明的时候完成了初始化,即变量a在产生的时候值就为25

int a; a = 25;//先声明,后初始化,即变量a在产生的时候为随机值,然后将其赋为25

//如果在声明中包含有const关键字,说明它是静态变量,不能被赋值。
CJBAAA 2011-01-02
  • 打赏
  • 举报
回复
楼上的几位介绍的很好了,我就不多罗嗦了。学习了
無_1024 2011-01-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhzxlc_06 的回复:]
int a = 25;与int a; a = 25; // 没什么不同
const关键字,声明的变量不能被改变
[/Quote]
嗯 那个没什么区别 使用const必须在定义是就初始化 不然就是一个语法错误
  • 打赏
  • 举报
回复
前一个是声明变量的时候就有赋初值了(初始化)
后一个先声明,也就是先申请内存空间,在往该内存空间写值

const修饰变量,表示这个东西是个常量,其值不能修改了,也就是说,const修饰的变量应该是在声明的时候就初始化(赋初值),否则是无意义的。编译器对这种类型的变量在分配其内存的时候是放到只读内存区域的
chaoliu1024 2011-01-02
  • 打赏
  • 举报
回复
int a = 25;与int a; a = 25; // 没什么不同
const关键字,声明的变量不能被改变

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧