关于c++ 的字符串长度和指针小问题 在C++中字符串常量A表

因为表示转义字符,wx41\
x103y各个字符分别是:
w
x41
\

103
y

在C++中字符串常量A表示错误的是 :
A‘101’//不正确,字符常量
B’x41′ //不正确,字符常量
C65 //不正确,整型常量,表示字符‘A’
D"A" //正确

字符常量是用单引号括起来的单个字符构成。
  有两种表示方法:
  一种是用该字符的图形符号,如’b’ ,’y’,’*’。
  另外还可以用字符的ASCII码表示,即用反斜符()开头,后跟字符的ASCII码,这种方法也称为转义序列表示法,具体方法是:有两种形式:
  一种是用字符的八进制ASCII码,表示为:odd.这里,ddd是八进制值(o可以省略)。
  另一种使用字符的十六进制ASCII码值,表示为 xhh或0Xhh 这里hh是两位十六进制值。
所以我觉得答案应该是D而不是C,C正确的表示方法应该是’x43’,至于A,那是字符串的定义,不是字符常量的定义,一楼应该是审题不清

C++练习题大荟萃
本书共包含十个章节的内容
第一章 C++语言的概述
一、简答题
1. C++的单词包含那几种?
2. 一个标识符中的首字符必须是什么字符?其余位置上的字符必须是什么字符?
3. 数值常量、字符常量、字符串常量和标识符在表示上各有什么区别?
4. C++语句分为哪几类?
5. #include命令的格式和功能各是什么?使用尖括号和双引号在含义上有什么区别?
6. 你已经知道了那几个系统头文件?
7. cout和cin 标识符的含义是什么?他们后面分别使用什么运算符?各运算符的作用是什么?
8. 上机运行一个程序需要经过那些阶段?
二、填空题
1. 程序中的预处理命令是指以______字符开头的命令。
2. 一条简单语句是以______字符作为结束符的,一条复合语句是分别以______字符和______字符作为开始符和结束符的。
3. 空白符是______符、______符、和______符的统称。
4. 在#include命令中所包含的头文件,可以是______头文件,也可以是______头文件。
5. 使用#include命令可以包含一个头文件,也可以包含一个______文件。
6. 一个函数定义由______和______两部分组成。
7. 一个程序中必须有一个名为______的函数。
8. 函数头与______语句一样都能够提供出函数的参数和返回类型等信息。
9. 若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的______语句。
10. 一个函数的函数体就是一条______。
11. C++头文件和源程序文件的扩展名分别为______和______。
12. 程序文件的编译错误分为______和______两类。
13. 当使用______保留字作为函数类型时,该函数不返回任何值。
14. 当函数参数表用______保留字表示时,则表示该参数表为空。
15. 从一条函数原型语句”int fun1(void);”可知,该函数的返回类型为______,该函数带有______个参数。
16. 当执行cout语句向C++显示输出屏幕输出一个数据项的值时,若该值的显示宽度(即所占显示位置的字符数)为n,则显示该值后光标将从原位置后移______个字符显示位置。
17. 当执行cout语句输出endl数据项时,将使C++显示输出屏幕上的光标从当前位置移动到______的开始位置。
18. 当执行cin语句时,从键盘上输入每个数据后必须输入一个______符,然后才能接着输入下一个数据。
三、写出下列程序运行结果,此题又作为上机实验题
1. #include
void main()
{
int x,y;
x=5;y=6;
cout<<”x+y=”<<x+y<<’,’;
cout<<”x*y=”<<x*y<<endl;
}
2. #include
int cube(int);
void main(void)
{
cout<<”cube(3)=”<<cube(3)<<endl;
cout<<”cube(5)=”<<cube(5)<<endl;
cout<<”cube(8)=”<<cube(8)<<endl;
}
int cube(int x)
{
return x*x*x;
}
3. #include
#include”abc.h”
void main()
{
double a,b,c;
double averageValue;
a=2;b=3;c=4;
averageValue=AVE(a,b,c);
cout<<”averageValue;”<<averageValue<<endl;
averageValue=AVE(a,b+1,c+2);
cout<<”averageValue:”<<averageValue<<endl;
}
其中abc.h文件的内容如下:
double AVE(double x,double y,double z)
{
return (x+y+z)/3;
}
4. #include
#include”example.h”
void main()
{
int a,b,c;
cout<<”请输入3个整数:”
cin>>a>>b>>c;
cout<<”最大值:”<<max_value(a,b,c)<<endl;
cout<<”最小值:”<<min_value(a,b,c)<<endl;
}
其中example.h文件的内容如下:
int max_value(int a,int b,int c);
int min_value(int a,int b,int c);

这两个函数的定义(又称为函数的实现或具体实现)被保存在另一个程序文件中,它将被编译后连接到主文件中产生出可执行文件。该程序文件的内容如下:
int max_value(int a,int b,int c)
{
if(a<b) a=b;//若a小于b则将b的值赋给a
if(a<c) a=c;//若a小于c则将c的值赋给a
return a;
}
int min_value(int a,int b,int c)
{
if(a>b) a=b;// 若a大于b则将b的值赋给a
if(a>c) a=c;// 若a大于c则将c的值赋给a
return a;
}
请读者自行假定用于输入的3个整数。

第二章 数据类型和表达式
一、简答题
1. C++数据分为哪四种大的类型?在大的整数类型中又分为哪四种类型?
2. 整数类型分为哪三种类型,每种类型的长度各是多少?
3. 实数类型分为哪三种类型,它们的类型长度各是多少?
4. 单精度和双精度分别表示多少位有效数字?
5. 每一种C++具体类型的关键字是什么?
6. 哪四种保留字能够用来修饰int 保留字成为类型关键字?哪两种保留字能够用来修饰char保留字成为类型关键字?
7. 整型常数具有哪三种不同进制的表示?如何区分它们?
8. 一个整数后缀L或U分别具有什么含义?
9. 转义字符序列中的首字符是什么字符?
10. 实数具有哪两种表示方法?一个浮点数具有那些成分?什么叫规格化浮点数?
11. 定义符号常量和变量的语句有什么异同?
12. #define命令的作用是什么?
13. 一个C++运算符具有哪三种属性?
14. 左值和非左值(又称右值)有什么区别?
15. 在程序文件中使用系统数学函数或随机函数时,各需要通过#include命令引入哪个头文件?
16. 一个表达式是否必须有一个值,在什么情况下它没有值?
17. 执行一个函数调用的大致过程是什么?函数运算的优先级如何?
二、填空题
1. 数据类型int,char,bool,float,double的类型长度分别为______、______、______、______和______。
2. 短整型、整型和长整型的最简关键字分别为______、______和______。
3. 常数-4.205,1200和6.7E-9分别具有______、______和______位有效数字。
4. 数值常量46、0173和0x62对应十进制值分别为______、______和______。
5. 字符常量 ’k’,’
’,’\’,’/052’和’xA2’对应的数值分别为______、______、______、______和______。
6. 字符串”It ’s40an40apple.
”中包含有______个字符。
7. 枚举类型中的每个枚举值都是一个______,它的值是一个______,值的类型为______。
8. 实数340.0和0.027E8对应的规格化浮点数分别为______和______。
9. 常数100,-25,3.62,1E5和-4.73f的数据类型分别为______、______、______、______和______。
10. 若x的值为10,则x+=5的值和运算后的______的值相同,等于______。
11. 若x=5,y=10,则计算y*=++x表达式后,x和y的值分别为______和______。
12. 若x=25,则计算y=x++表达式后,x和y的值分别为______和______。
13. 假定x和ch分别为int 型和char型,则sizeof(x)和sizeof(ch)的值分别为______和______。
14. 假定x=64,y=88,则x>2的值分别为______和______。
15. 假定x是一个逻辑量,则x&&true的值与______的值相同,x||false的值也与______的值相同。
16. 假定x是一个逻辑量,则x&&!x的值分别为______和______。
17. 假定x=10,则表达式x<=10?20:30的值为______。
18. 假定x=10.5,y=-4.6,则表达式floor(fabs(x+y))的值为______。
19. 表达式sqrt(81)和pow(6,3)的值分别为______和______。
20. 随机函数rand()%20的值在______至______区间内。
21. 数学算式(1+x)sin48°和axbex+1对应的算术表达式分别为______和______。
三、试指出下列各表达式值的类型
假定a为int型,x为double型,

1. 327
2. -1.5e6
3. 42.0f
4. 48L
5. 0372
6. 0xabc
7. 1/3
8. 1%3
9. 1.0%3
10. a*3/x
11. a*(a+x)
12. 1+a*a
13. a+=3
14. x*=2
15. ‘x’
16. ‘x’+20
17. true
18. ++a
19. short(a)
20. bool(x)
21. (unsigned int)(0256)
22. x=a++
23. sizeof(bool)
24. char(a+10)
25. abs(x)
26. fabs(a)
27. floor(x)
28. ceil(a)
29. exp(4)+2
30. rand()
31. rand()/100
32. floor(log(x))
33. pow(a,4)
34. a>10?x:sqrt(x)
35. a>100
36. x!=10
37. a&&x
38. a10
39. !x
40. !(a==0)

四、试求出下列每个表达式的值(各表达式互不影响)
已知a=20,x=4.7,r=’a’,

1. a++
2. ++r
3. a%5
4. a/5
5. r%18
6. 1+a/3%4
7. a/8.0
8. r+=4
9. x=2*(x+5)-1
10. char(a+30)
11. 10*sizeof(int)
12. (a<<3)+5
13. a>0
14. a==1
15. a++&&r!=’a’
16. ++a&&r==’a’
17. a||x<=10
18. a==r||a==floor(x)
19. a=(r>’A’?a+10:a-10)
20. a=(r<’A’?a+10:a-10)
21. x=(a++,r++)
22. x=(a++,r++,50)
23. x=pow(3,5)
24. x=fabs(-26.5)+4
25. a=abs(a)%8-10
26. floor(x+0.5)
27. ceil(x-0.5)
28. ceil((x-=0.5)-0.5)

五、把下列数学算式或不等式表示成C++表达式
1. 2x(1+x2/3)
2. (1+ex)/(1-ex)
3. (-b+(b2-4ac)1/2)/2a
4. 1/(3xln(2x+k))
5. sin3(x+π/4)/(3+cos3(x-π/4))
6. 1/7(1+ex+1) n
7. 0<=x<=20
8. ax-by!=c
9. 4x+7y-2=3ab
10. |2×2+1|/|3x+2|<-5同时3x+2!=0
11. age>=55或者pay>=820
12. place=”江苏”同时sex=”女”
13. ‘a’<=ch<=’z’或者’A’<=ch<=’Z’
14. s[0]=’0’同时(s[1]=’x’或者s[1]=’X’)
六、写出下列每个程序运行后的输出结果并自行上机验证
1. #include
enum race{Black,White,Yellow};
void main()
{
race ra;
ra=Black;cout<<ra<<’,’;
ra=White;cout<<ra<<’,’;
ra=Yellow;cout<<ra<<’,’;
cout<<Black+White+Yellow<<endl;
}
2. #include
#define PI 3.14159
const int R=10
void main()
{
double p,s;
p=2*R*PI;
cout<<”p=”<<p<<endl;
cout<<”s=”<<s<<endl;
}
3. #include
void main()
{
int i=0,j=1,k;
k=i+=j;
cout<<i<<’ ’<<j<<’ ’<<k<<endl;
k=(i++)*(++j);
cout<<i<<’ ’<<j<<’ ’<<k<<endl;
k*=i++*j–;
cout<<i<<’ ’<<j<<’ ’<<k<<endl;
}
4. #include
void main()
{
cout<<sizeof(bool)<<’ ’<<sizeof(char)<<’ ’;
cout<<sizeof(short)<<’ ’<<sizeof(int)<<’ ’;
cout<<sizeof(long)<<’ ’<<sizeof(float)<<’ ’;
cout<<sizeof(double)<<’ ’<<sizeof(long double)<<’ ’;
cout<<sizeof(int *)<<’ ’<<sizeof(double *)<<’ ’;
}
5. #include
const int w=30;
void main()
{
int x,y;
x=w>2;
cout<<w<<’ ’<<x<<’ ’<<y<<endl;
x=w&10;y=w|10;
cout<<w<<’ ’<<x<<’ ’<<y<<endl;
x=w^10;y=-x&w;
cout<<w<<’ ’<<x<<’ ’<<y<<endl;
}
6. #include
void main()
{
int x=10,y=-1;
couty)&&(y<0))<<’ ’;
couty)||(y<0))<<’ ’;
cout=0))<<’ ’;
cout=0))<<’ ’;
cout<<((x==y)&&y)<<’ ’;
cout<<((x==y)||y)<<’ ’;
}
7. #include
void main()
{
int x=5,y=10,k;
(k=x)+=y;cout<<x<<’ ’<<y<<’ ’<<k<<endl;
k=x+=y;cout<<x<<’ ’<<y<<’ ’<<k<<endl;
k=x*=y;cout<<x<<’ ’<<y<<’ ’<<k<<endl;
k=(x++,y++);cout<<x<<’ ’<<y<<’ ’<<k<<endl;
k=x++,y++;
cout<<x<<’ ’<<y<<’ ’<<k<<endl;
}
8. #include
#include
void main()
{
double x=15.72;
double y,z;
y=ceil(x);z=floor(x);
cout<<x<<’ ’<<y<<’ ’<<z<<endl;
y=floor(x+0.5);z=floor(x*10+0.5)/10;
cout<<x<<’ ’<<y<<’ ’<<z<<endl;
y=ceil(x-0.5);z=ceil(x*10-0.5)/10;
cout<<x<<’ ’<<y<<’ ’<<z<<endl;
}
七、编写下列程序
1. 已知一个三角形中三条边的长度分别为a,b和c,利用计算公式(s(s-a)(s-b)(s-c))1/2 求出三角形的面积,其中s=(a+b+c)/2,假定a,b和c的值由键盘输入,并确保任何两边的长度大于第三条边。
2. 假定一所大学2001年招生人数为3000人,若以后每年平均比上一年计划扩招10%,则2006年将计划招生多少人?
3. 已知有4个整数为a,b,c,d,试计算出它们的算术平均值和几何平均值。
4. 已知x=2a/2(a+b)sina,y=2b/3(a+b)cosb,试根据从键盘上输入的a和b的值分别计算出x和y的值。
八、上机实验题
1. 让计算机随机出10道两位整数加法题供用户计算,每道题10分,计算完成后打印出得分。
#include
#include
#include
const N=10;
void main()
{
srand(time(0));
int x,y,z,c=0;
for(int I=1;I<=N;I++)
{
x=rand()%90+10;
y=rand()%90+10;
cout<<x<<’+’<<y<<’=’;
cin>>z;
if(x+y==z)c++;
}
cout<<”得分:”<<c*10<<endl;
}
2. 打印出0°-90°之间每隔5°的正弦值和余弦值。
#include
#include
const double RAD=3.14159/180;
void main()
{
int I=0;
while(I<=90)
{
cout<<setw(5)<<I<<setw(10)<<sin(I*RAD)<<’ ’;
//setw(n)使后面一个数据的输入宽度为n,
//它在iomanip.h头文件中有定义
cout<<setw(10)<<cos(I*RAD)<<endl;
I+=5;
}
}
3. 把从键盘上输入的一个正整数按数字位的相反次序输出。
#include
void main()
{
int num,rem;
cout>>num;
do{
rem=num%10;
num/=10;
cout<<rem;
}while(num>0);
cout<<endl;
}
4. 打印出a-f中每个大小写字母所对应的ASCII码。
#include
void main()
{
char c1=’A’,c2=’a’;
for(int I=1;I<=6;I++)
{
cout<<c1<<’:’<<int(c1)<<”,”;
cout<<c2<<’:’<<int(c2)<<endl;
c1++;c2++;
}
}
5. 从键盘上输入两个整数,由用户回答他们的和、差、乘和取余运算的结果,并统计出正确答案的个数。
#include
void main()
{
int x,y,z,c=0;
cout<<”输入两个整数:”;
cin>>x>>y;
cout<<x<<’+’<<y<<’=’;
cin>>z;if(x+y==z) c++;
cout<<x<<’-’<<y<<’=’;
cin>>z;if(x-y==z) c++;
cout<<x<<’*’<<y<<’=’;
cin>>z;if(x*y==z) c++;
cout<<x<<’/’<<y<<’=’;
cin>>z;if(x/y==z) c++;
cout<<x<<’%’<<y<<’=’;
cin>>z;if(x%y==z) c++;
cout<<”答对”<<c<<”道题”<<endl;

C中的CONST
  C中CONST的使用:
  const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。
  虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题。
  问题:const变量 & 常量
  为什么下面的例子在使用一个const变量来初始化数组,ANSI C的编译器会报告一个错误呢? 
  const int n = 5;
  int a[n];
  答案与分析:
  1)、这个问题讨论的是“常量”与“只读变量”的区别。常量肯定是只读的,例如5, “abc”,等,肯定是只读的,因为因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它。而“只读变量”则是在内存中开辟一个地方来存放它的值,只不过这个值由编译器限定不允许被修改。C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量n被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时维度必须是“常量”,“只读变量”也是不可以的。
  2)、注意:在ANSI C中,这种写法是错误的,因为数组的大小应该是个常量,而const int n,n只是一个变量(常量 != 不可变的变量,但在标准C++中,这样定义的是一个常量,这种写法是对的),实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是 ANSI C对数组的规定限制了它。
  3)、那么,在ANSI C 语言中用什么来定义常量呢?答案是enum类型和#define宏,这两个都可以用来定义常量。
  问题:const变量 & const 限定的内容
  下面的代码编译器会报一个错误,请问,哪一个语句是错误的呢? 
  typedef char * pStr;
  char string[4] = "abc";
  const char *p1 = string;
  const pStr p2 = string;
  p1++;
  p2++;
  答案与分析:
  问题出在p2++上。
  1)、const使用的基本形式: const char m;
  限定m不可变。
  2)、替换1式中的m, const char *pm;
  限定*pm不可变,当然pm是可变的,因此问题中p1++是对的。
  3)、替换1式char, const newType m;
  限定m不可变,问题中的charptr就是一种新类型,因此问题中p2不可变,p2++是错误的。
  问题:const变量 & 字符串常量
  请问下面的代码有什么问题?
  char *p = "i’m hungry!";
  p[0]= ‘I’;
  答案与分析:
  上面的代码可能会造成内存的非法写操作。分析如下, “i’m hungry”实质上是字符串常量,而常量往往被编译器放在只读的内存区,不可写。p初始指向这个只读的内存区,而p[0] = ‘I’则企图去写这个地方,编译器当然不会答应。
  问题:const变量 & 字符串常量2
  请问char a[3] = "abc" 合法吗?使用它有什么隐患?
  答案与分析:
  在标准C中这是合法的,但是它的生存环境非常狭小;它定义一个大小为3的数组,初始化为“abc”,,注意,它没有通常的字符串终止符’’,因此这个数组只是看起来像C语言中的字符串,实质上却不是,因此所有对字符串进行处理的函数,比如strcpy、printf等,都不能够被使用在这个假字符串上。
  问题5:const & 指针
  类型声明中const用来修饰一个常量,有如下两种写法,那么,请问,下面分别用const限定不可变的内容是什么?
  1)、const在前面
  const int nValue; //nValue是const
  const char *pContent; //*pContent是const, pContent可变
  const (char *) pContent;//pContent是const,*pContent可变
  char* const pContent; //pContent是const,*pContent可变
  const char* const pContent; //pContent和*pContent都是const
  2)、const在后面,与上面的声明对等
  int const nValue; // nValue是const
  char const * pContent;// *pContent是const, pContent可变
  (char *) const pContent;//pContent是const,*pContent可变
  char* const pContent;// pContent是const,*pContent可变
  char const* const pContent;// pContent和*pContent都是const
  答案与分析:
  const和指针一起使用是C语言中一个很常见的困惑之处,在实际开发中,特别是在看别人代码的时候,常常会因为这样而不好判断作者的意图,下面讲一下我的判断原则:
  沿着*号划一条线,如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。你可以根据这个规则来看上面声明的实际意义,相信定会一目了然。
  另外,需要注意:对于const (char *) ; 因为char *是一个整体,相当于一个类型(如 char),因此,这是限定指针是const。
[编辑本段]C++中CONST
  C中常用:“ #define 变量名 变量值”定义一个值替代,然而却有个致命缺点:缺乏类型检测机制,这样预处理在C++中成为可能引发错误的隐患,于是引入const.
  const使用:
  1. 用于指针的两种情况:const是一个左结合的类型修饰符.
  int const *A; //A可变,*A不可变
  int *const A; //A不可变,*A可变
  2.限定函数的传递值参数:
  void function(const int Var); //传递过来的参数在函数内不可以改变.
  3.限定函数返回值型.
  const int function(); //此时const无意义
  const myclassname function(); //函数返回自定义类型myclassname.
  4限定函数类型.
  void function()const; //常成员函数, Const成员函数不能改变对象的成员函数。
  例如:
  int Point::GetY()
  {
  return yVal;
  }
  这个函数被调用时,不改变Point对象,而下面的函数改变Point对象:
  void Point:: SetPt (int x, int y)
  {
  xVal=x;
  yVal=y;
  }
  为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数的函数原型中加上const说明:
  class Point
  {
  public:
  int GetX() const;
  int GetY() const;
  void SetPt (int, int);
  void OffsetPt (int, int);
  private:
  int xVal, yVal;
  };
  const成员函数应该在函数原型说明和函数定义中都增加const限定:
  int Point::GetY() const
  {
  return yVal;
  }
  class Set {
  public:
  Set (void){ card = 0; }
  bool Member(const int) const;
  void AddElem(const int);
  //…
  };
  bool Set::Member (const int elem) const
  {
  //…
  }
  非常量成员函数不能被常量成员对象调用,因为它可能企图修改常量的数据成员:
  const Set s;
  s.AddElem(10); // 非法: AddElem不是常量成员函数
  s.Member(10); // 正确
  但构造函数和析构函数对这个规则例外,它们从不定义为常量成员,但可被常量对象调用(被自动调用)。它们也能给常量的数据成员赋值,除非数据成员本身是常量。
  为什么需要const成员函数?
  我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员,也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。
  const成员函数和const对象
  实际上,const成员函数还有另外一项作用,即常量对象相关。对于内置的数据类型,我们可以定义它们的常量,用户自定义的类也一样,可以定义它们的常量对象。例如,定义一个整型常量的方法为:
  const int i=1 ;
  同样,也可以定义常量对象,假定有一个类classA,定义该类的常量对象的方法为:
  const classA a(2);
  这里,a是类classA的一个const对象,"2"传给它的构造函数参数。const对象的数据成员在对象寿命期内不能改变。但是,如何保证该类的数据成员不被改变呢?
  为了确保const对象的数据成员不会被改变,在C++中,const对象只能调用const成员函数。如果一个成员函数实际上没有对数据成员作任何形式的修改,但是它没有被const关键字限定的,也不能被常量对象调用。下面通过一个例子来说明这个问题:
  class C
  {
  int X;
  public:
  int GetX()
  {
  return X;
  }
  void SetX(int X)
  {
  this->X = X;
  }
  };
  void main()
  {
  const C constC;
  cout<<constC.GetX();
  }
  如果我们编译上面的程序代码,编译器会出现错误提示:constC是个常量对象,它只能调用const成员函数。虽然GetX( )函数实际上并没有改变数据成员X,由于没有const关键字限定,所以仍旧不能被constC对象调用。如果我们将上述加粗的代码:
  int GetX()
  改写成:
  int GetX()const
  再重新编译,就没有问题了。
  const成员函数的使用
  const成员函数表示该成员函数只能读类数据成员,而不能修改类成员数据。定义const成员函数时,把const关键字放在函数的参数表和函数体之间。有人可能会问:为什么不将const放在函数声明前呢?因为这样做意味着函数的返回值是常量,意义完全不同。下面是定义const成员函数的一个实例:
  class X
  {
  int i;
  public:
  int f() const;
  };
  关键字const必须用同样的方式重复出现在函数实现里,否则编译器会把它看成一个不同的函数:
  int X::f() const
  {
  return i;
  }
  如果f( )试图用任何方式改变i或调用另一个非const成员函数,编译器将给出错误信息。任何不修改成员数据的函数都应该声明为const函数,这样有助于提高程序的可读性和可靠性。

C#.net中的const
  const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值是常数,不能被修改。例如:
  const int x = 0;
  public const double gravitationalConstant = 6.673e-11;
  private const string productName = "Visual C#";
  备注
  常数声明的类型指定声明引入的成员类型。常数表达式必须产生具有目标类型或者可隐式转换为目标类型的类型的值。
  常数表达式是在编译时可被完全计算的表达式。因此,对于引用类型的常数,可能的值只能是 string 和 null。
  常数声明可以声明多个常数,例如:
  public const double x = 1.0, y = 2.0, z = 3.0;
  不允许在常数声明中使用 static 修饰符。
  常数可以参与常数表达式,如下所示:
  public const int c1 = 5;
  public const int c2 = c1 + 100;
  注意
  readonly 关键字与 const 关键字不同。const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数,如下面的代码行所示:public static readonly uint l1 = (uint)DateTime.Now.Ticks;

许良15116469717沅江

关于c++ 的字符串长度和指针小问题_****** pa自加 指向第二w = ++(*(pa+1))所以 *(pa+1) 自加后赋值给 w =4…

问个C++小问题,关于string和字符指针~****** string不是C++的基本数据类型,是通过调用类库实现的,char *b这种方法,相当于b指向后边那个串的首地址,然后后边一块连续的内存,当读到'/0'就认为串结束,这个也是可以修改的,可以像数组那样直接调用,也可以直接使用地址,比如*(b+2),就可以得到3,string只是在一个类里进行了对串的处理,你看不到他处理的方法而已.这样就可以说a是一个string型的对象,b是一个指向字符串的指针

关于c++中求字符串长度的函数strlen的小问题_****** strlen函数所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符''为止,然后返回计数器值(长度不包含"").strlen函数简介…

C++高手 求救.关于求字符串的长度问题.以下有两种办法.****** 字符串 存储时是有结束符'',但一般字符长度是不含有的有效字符个数,strlen计算的第一个结束符''前的所有有效字符的个数. 长度可以用=最后一个指针值–首个字符的指针值;你老师说的是对的,你可以简单画个图,最后一个指针指向'',第一个指针指向开头,两者相减,看看是不是等于有效字符的个数,去掉'',之前的所有字符的个数

问一个关于c++字符串赋值和长度的问题****** 3.你查一下“ 评论0 0 0

C/C++,指针和字符串的一点小问题_****** 为ch多申请一个字符空间,写入数据时,如果达到80,则第81位写'',这样表示存储了一个字符串,这样直接cout << p->ch ;就不会有问题了.如果最后一个结点不足80个字符,则p->ch[XX+1]='、0'; 这样就不会输出乱码了….

c++有关字符串和指针的问题_****** p给予阵列索引后,cout<<p<<endl; //读取时会一直读到''为止.cout<<*p<<endl; //读取一个字….

c++字符指针与字符串的问题_****** 简单回答一下你的各个问题,"abcd"是一个字符串,在内存中肯定有自己的地址空间,char *a = "abcd"就是把这个地址空间赋给a保存的."abcd"本身就是一个地址,因为在c语言中字符串就是对应于一个指针.int b=5; *a = &b的这个,&…

C++字符串长度问题_****** 一楼说的就是标准答案,这里解释下:你写的:sizeof(a)运算的是指针a的长度,占4字节你可以试下char b[]="hello";cout<<sizeof(b)<<endl;输出就是6;因为b[]中储存的是'h','e','l','l','o',''所以是6,5是没有道理的…

c++ 字符串与指针的问题_****** 第一个是p新定义的一个数组,出现新得到内存分配,第二个是p获得只想ch的地址….

相关内容:@ c语言指针判断回文字符串 @ 关于c位的作文 @ 关于c位的作文800字 @ 关于c位的议论文 @ 关于c位现象的作文 @ 关于c位问题的作文 @ 问题不大 @ 小问题英文 @ 小问题的英文小ks @ 套路小问题 @ 有趣的小问题 @ 智力小问题 @ 生活小问题 @ 小问题歌词 @ 小问题英语怎么说 @ strlen计算字符串长度 @ 求字符串的长度的函数 @ c语言求字符串长度str