声明与定义的一些例子

#include<iostream>usingnamespacestd;
//a1=2;  //错误,标识符必须先声明后使用。
int a2;  //未使用extern的变量声明同时是一个定义,因此此语句会为变量分配内存空间。//int a2;  //错误,同一变量只能定义一次。
extern int a3; //这是对变量的非定义声明,使用extern关键定,而且未初始化。externinta3;  //正确,可以对同一个标识符声明多次。
//extern long int a3;  //错误,对同一标识符的多次声明必须要有相同的类型。externinta5=2; //任何进行了初始化的语句都是一个定义。
//extern auto int a6;  //错误,在声明时只能指定一个存储类区分符,即auto, extern ,static, register之中只能有一个。//const a7;   //错误,C++中必须为标识符指定类型区分符(比如int, float等),这种语句在C语言中是正常的,因为C支持默认的int型。
const const volatile int a8=8;  //正确,声明中可以使用多个相同或不同的类型限定词,对于多于的相同类型限定词编译器会忽略。若变量同时使用const和volatile限定,则此变量无法被程序本身所修改,但可以被其他程序或硬件修改。注意:const常量必须初始化。
//int a9 auto;   //错误,存储类区分符应在标识符的前面。
//int a10 const; //错误,类型限定词应出现在标识符的前面,但在类中声明的是成员函数时除外。
class A{voidf1() const;};  //在类中声明的是成员函数时可以将类型限定词放在函数名的后面,注意:只有函数名才是正确的,对于变量名将会出错。
//int []a11;   //错误,()、[]运算符,在声明时必须放在标识符的后面,这种语句在java中是允许的。//int a12*;   //错误,声明时*、&、*const必须放在标识符的前面。
//int *static a13;  //错误,*不能放在类型区分符(如int, float等)和存储类区分符(如auto, extern等)的前面
int* const a14=0;  //正确,*可以放在类型限定词的前面,这时类型限定词限定的是左边的*(即指针),注意:const常量必须初始化。
//int f2()();   //错误,函数不能反回函数。
int(*f3())();  //正确,函数的反回值可以是一个指向函数的指针,函数f3反回一个指针,这个指针指向一个函数。//int f4()[];   //函数的反回值不能是一个数组。
int(*f5())[];  //正确,函数的反回值可以是一个指向数组的指针。函数f5反回一个指针,这个指针指向的是一个数组。//int a15[]();    //错误,数组中的元素不能是函数。
int(*a16[])();  //正确,数组中的元素可以是一个指向函数的指针。
int a17[][11];  //正确,数组中的元素可以是一个数组,这就是普通的二维数组,注意:声明二维数组时第二个[]必须指定一个常量值。
int a18=18;  //变量的复制初始化语法之一。
int a19={19}; //使用大括号{}对变量进行复制初始化,此方法一般用于声明有多个元素的数组,
int a20[]={1,2,};  //使用大括号{}一般用于初始化有多个元素的数组,每个值之间使用逗号隔开,且以逗号结束,当然也可以省略最后的那个逗号。
int a21(21);   //变量的直接初始化方法,就是在变量名后紧跟小括号并在其中指定初始值。
int a22();  //注意:直接初始化时,变量名后的括号不能为空值,若为空值则表示的是声明一个反回指定类型的无参函数,因此这里表示的是声明一个反回int类型的无参函数,这里不是在使用直接初始化方式初始化变量。
int a23;   //在函数体外定义的变量会被自动初始化为值;voidmain(){intb1,b2,b3=33,b4,b5=3;   //同时声明或初始化多个变量时使用逗号隔开
//extern int a24=3;  //错误,在函数内部不能对使用extern声明的变量进行初始化。
extern int a23;   //extern表明此变量在程序中的其他地方有定义或者在其他文件中有定义,这里a23在函数体外被定义了。inta25; // 在函数体内定义的内置类型变量则不会对其进行初始化,编译器一般都会为变量产生一个随机值。
//复制初始化与赋值区别:初始化是在创建变量的时候给他一个初始值,而赋值则是发生在变量已经创建之后进行的擦除旧值写入新值的操作。
int a26=26;  //这是复制初始化,这是在创建变量a25时(这时变量a25还没有值)就将变量a26的值初始化为了a26=261;  //这是赋值,表示将变量a26的旧值擦除,并将新值写入到变量a26中。//a8=8;  //错误,不能对常量a8的值进行修改。
constint* const(*f())[]; //一个复杂声明,复杂声明时,首先从标识符开始按照优先级规则进行分析,具体参看正文。int*p;
(constint* const(*)[]) p;   //复杂声明的类型判断一般用于强制类型转换。system("pause");}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值