
正文
c语言与c++中constchar,c语言中的const的作用及解析
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
请问C语言中的 (const char *)"\\#" 是什么意思
C中用“”括起来的叫“常字符串”;常字符串默认的是char
*型指针而不是const
char
*型指针。这里的(const
char
*)"\\#"就是把常字符串"\\#"的指针强制为(const
char
*)指针。
相关问答
Q1: C语言,定义一个数组,元素的类型是const char*
#include "stdio.h"
#include "stdlib.h"
typedef struct stutttt
{ /*定义结构体*/
char name[50];
char num[50];
double score;
}stu;
stu student,s[1000];
int n;
double max;
double average;
char fileI[20] = "stuin.txt";
char fileO[20] = "stuout.txt";
int cmp( const void * a, const void * b )
{
if(((stu*)a)-score ((stu*)b)-score) return 1;
else return -1;
}
void Sort()
{
qsort(s,n,sizeof(stu),cmp);
}
void Pnt()
{
int i;
for(i=0;in;i++)
{
printf("%s %s %.0lf\n",s[i].num,s[i].name,s[i].score);
}
printf("\n");
}
void Read()
{
n = 0;
FILE *fp;
if((fp=fopen(fileI,"r"))==NULL)
{ /*以只读打开文件*/
printf("cannot open file");
getchar();
exit(0);
}
while( fscanf(fp,"%s%s%lf\n",s[n].num,s[n].name,s[n].score)!=EOF /* 从文件读*/ )
{
n++;
}
fclose(fp);
}
void Solve()
{
int i;
int h=0,e=0,l=0;
int m90_100 = 0,m80_89 = 0, m70_79 = 0,m60_69=0,m0_59=0;
char sss[81] = "";/*"--------------------------------------------------------------------------------";*/
FILE * fp;
if((fp=fopen(fileO,"w"))==NULL)
{ /*以只读打开文件*/
printf("cannot open file");
getchar();
exit(0);
}
average = 0;
max = 0;
for(i=0;in;i++)
{
if( s[i].score max ) max = s[i].score;
average += s[i].score;
}
average /= n;
puts("最高分的人:");
fputs("最高分的人:\n",fp);
for(i=0;in;i++)
{
if( s[i].score average ) l++;
else if( s[i].score average ) h++;
else e++;
if( s[i].score=90 ) m90_100++;
else if( s[i].score=80 ) m80_89 ++;
else if( s[i].score=70 ) m70_79 ++;
else if( s[i].score=60 ) m60_69 ++;
else m0_59 ++;
if( s[i].score max ) continue;
printf("%s %s %.0lf\n",s[i].num,s[i].name,s[i].score);
fprintf(fp,"%s %s %.0lf\n",s[i].num,s[i].name,s[i].score);
}
printf("\n");
fprintf(fp,"\n");
printf("平均成绩:%lf\n",average);
printf("高于平均 %d 人\n",h);
printf("等于平均 %d 人\n",e);
printf("低于平均 %d 人\n",l);
fprintf(fp,"平均成绩:%lf\n",average);
fprintf(fp,"高于平均 %d 人\n",h);
fprintf(fp,"等于平均 %d 人\n",e);
fprintf(fp,"低于平均 %d 人\n",l);
puts("");
fputs("",fp);
printf("优秀(90~100) %d 人数, 百分比;%%%lf\n",m90_100,100.0*m90_100/n);
printf("优秀(80~89 ) %d 人数, 百分比;%%%lf\n",m80_89 ,100.0*m80_89 /n);
printf("优秀(70~79 ) %d 人数, 百分比;%%%lf\n",m70_79 ,100.0*m70_79 /n);
printf("优秀(60~69 ) %d 人数, 百分比;%%%lf\n",m60_69 ,100.0*m60_69 /n);
printf("优秀(00~50 ) %d 人数, 百分比;%%%lf\n",m0_59 ,100.0*m0_59 /n);
fprintf(fp,"优秀(90~100) %d 人数, 百分比;%%%lf\n",m90_100,100.0*m90_100/n);
fprintf(fp,"优秀(80~89 ) %d 人数, 百分比;%%%lf\n",m80_89 ,100.0*m80_89 /n);
fprintf(fp,"优秀(70~79 ) %d 人数, 百分比;%%%lf\n",m70_79 ,100.0*m70_79 /n);
fprintf(fp,"优秀(60~69 ) %d 人数, 百分比;%%%lf\n",m60_69 ,100.0*m60_69 /n);
fprintf(fp,"优秀(00~50 ) %d 人数, 百分比;%%%lf\n",m0_59 ,100.0*m0_59 /n);
fclose(fp);
printf("\n结果已经写入文件%s\n",fileO);
}
main( )
{
int i;
Read();
Solve();
/* printf("来自文件的数据:\n");*/
/* Pnt();*/
/* Sort();*/
/* printf("按分数降序排序后的数据:\n");*/
/* Pnt();*/
getchar();
}
Q2: C语言中 const char *str[]怎么用
这是定义了一个 char类型的指针数组常量,const 定义后不能修改
str[1]里存放的是指向"one"字符数组的指针,
const char *str[]={"zero","one","two","three","four","five","six","seven","eight","nine"};
printf(str[1]);
输出 one
Q3: C++语言中const char*的意思
const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。
如你所说的,const char*="abcdef";
char*在这个的函数中,不可以再另外赋值。
如后面有char*="abf";之类的,会报错
Q4: C语言const char和char有什么区别,指针变量date有点懵,请帮我讲解一下?
有一个判断 C 语言的声明式的技巧,那就是“从右往左读”,C++ 创始人 Bjarne Stroustrup 在其著作《The C++ Programming Language》中推荐了这种方法,《C 专家编程》中也提及了这种技巧。相比于其他的“根据 const 与其他词素的距离判断”、“根据 const 的前后关系判断”等等,个人认为这是最人性化的方法。从某种意义上来说,C 编译器在进行词法分析的时候巧合地运用了这种范式来进行语义转换,这一点在 Backus(上下文无关法) 范式中也有体现。
具体的方法是:
const char * A:A 是一个指针,指向 const char。
char const * A:A 是一个指针,指向 const char。
char * const A:A 是一个 const 指针,指向 char。
const char * const A:A 是一个 const 指针,指向 const char。
const char const * const A:A 是一个 const 指针,指向 const char,后面两个(从右往左读)有一个是多余的。
看到给出的示例:
const char* date;
这是一个指向 const char 的指针,这说明指针本身可变,但是其指向的 char 是不可变的,而 date = "new string" 中常量字符串其实是一个指针,因为指针可变,所以这里没问题。
但是如果写成 char* const date,那么这就是一个不可变的指针,但是其指向的 char 是可变的,这时候写 date = "new string" 就会报错:
error: cannot assign to variable 'date' with const-qualified type 'char *const'
但是如果尝试如下语句:
char* const date = "Hello, world!";
date[0] = 'H';
编译能通过,但是运行时会出错:
zsh: bus error
总线错误是怎么引起的呢?不是指向的 char 可变吗?对,指向的 char 可变,所以编译能通过,但是赋给 date 的是一个字面字符串,按照 C 语言操作内存的机制,尝试更改字面字符串的会引起 bus error,至于具体的原因,可以继续深入了解 C 语言的编译机制和运行原理,这里不再赘述。
关于c语言与c++中constchar和c语言中的const的作用及解析的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







