C语言中const unsigned char *map = &font[0][0];什么意思

作者&投稿:诸葛顺 (若有异议请与网页底部的电邮联系)
在单片机C语言中const unsigned char ov529[5]={0xff,0xff,0xff,SYNC_ID,0x00}前面加const是什么意思??~

在嵌入式的纯C里面,const有两层意思:
1. 告诉编译器这个变量是只读的,如果发现代码里面有直接修改该变量的语句,则编译时报错。这一点与操作系统下的C语言是一样的。

2. 与该变量的储存区域有关。一般情况下,const变量会被存放在只读区域,例如ROM、Flash等(但不是绝对的)。
以下表达式可以获取变量的存放地址(也就是可以通过它知道存放区域)
(unsigned long)ov529
如果单片机支持printf,则可以输出以查看:
printf("Addr = 0x%.8X
", (unsigned long)ov529);

此外,你还可以试图去修改const定义的变量的值,看看会出现什么情况:
unsigned char *p = (unsigned char *)ov529;
(*p) = 0x55;
运行结果会是怎样呢?我只能告诉你,有很多可能情况:
如果ov529的存放区域是RAM等可读写的存储器,则一点问题都没有;
可是如果ov529的存放区域是ROM、Flash等只读存储器,则不同的单片机对此类异常的处理方式不一样,结果也就不一样。当然,有一点是一样的,那就是肯定修改不了的。

写了一段 你看是否合用
附图:计算结果
前4行结果是计算EFGH的结果示例,即程序原理
main()
{
int i;
unsigned char a[16]="ABCDEFGHIJKLMNO";
typedef unsigned long INT32U;
INT32U A[4],b[4];
/*计算示例段*/
A[0]=0x696A6B6C;
A[1]=0x69*0x1000000+0x6A*0x10000+0x100*0x6B+0x6C;
A[2]=(long)105*0x1000000+(long)106*0x10000+(long)107*0x100+(long)108;
printf("Example:%lx
",A[0]);
printf("%li
%li
%li

",A[0],A[1],A[2]);
/*计算示例段*/

for(i=0;i<=3;i++){
b[i]=(long)a[0+i*4]*0x1000000+(long)a[1+i*4]*0x10000+(long)a[2+i*4]*0x100+(long)a[3+i*4];
printf("b[%i]=%\li
",i,b[i]);}
A[1]=0x65*0x1000000+0x66*0x10000+0x100*0x67+0x68;
printf("%li
",A[1]);
getch();
}


计算结果

这个语句定义了一个名为map的常量指针,这个指针是指向一个二维数组font[0][0],
unsigned char *map是定义一个无符号型char指针,
*map = &fornt[0][0]是取fornt数组的地址,并将地址值赋给map指针,
在unsigned前加const表示map是一个常量指针,这样定义以后,我们只能通过map读出font数组的数据,但是不能对font数组进行写入或修改。

定义一个指针map,类型是const unsigned char*的,指向font数组中第(0,0)的元素的地址

这语句写的还真恶心


雄县15630214562: 在单片机C语言中const unsigned char ov529[5]={0xff,0xff,0xff,SYNC - ID,0x00}前面加const是什么意思?? -
元俊天晴: 表示常量,不允许修改里面的内容. 也就是你如果改变数组里面的值会报错.

雄县15630214562: C语言中const unsigned char *map = &font[0][0];什么意思 -
元俊天晴: 定义一个指针map,类型是const unsigned char*的,指向font数组中第(0,0)的元素的地址

雄县15630214562: c中const 作用 -
元俊天晴: const是一个C语言的关键字,它限定一个变量不允许被改变,可以提高代码的可靠性. const int a=100; b的内容不变,b只能是100也就是声明一个int类型的常量(#define b =100) int const b=100; //和上面作用一样const指针和引用一般用在...

雄县15630214562: c语言中const 是什么意思? -
元俊天晴: 可以定义const常量,具有不可变性.例如:const int Max=100; Max++会产生错误;便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患.例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改;可以避免...

雄县15630214562: c语言中const 是什么意思,怎么用,什么时候用? -
元俊天晴: const 表示常量,相当于宏定义,只能读取,不能修改. 常变量:const 数据类型 符号常变量 = 数值 如:const float PI=3.14; 指针常量: 数据类型 *const 指针变量=变量名 如:char *const p="abc"; const修饰的是指针变量,而不是指针的值...

雄县15630214562: c语言中const是什么?有什么用途?求解答,谢谢,急! -
元俊天晴: const 关键字可以定义一个常量,这个常量只能被赋值一次,而如果后面的程序试图修改这个常量的值,编译器就会报错.用这个关键字可以限定某些值(尤其是指针)防止被更改,或者转换某些值以满足合适的函数参数.如const int N=10,定义常量整型N=10 如果后面的语句中出现N++或N=a*b一类的语句,编译器就会报错,提示常量不能被更改.

雄县15630214562: 问C语言编程所涉及英文单词或函数的中英文对照表 -
元俊天晴: 1. 数据定义 C语言中所有的变量都具有某种类型,其定义的基本格式是:类型 变量名; int:整型 short:短整型 long:长整型 signed:有符号型 unsigned:无符号型 char:字符型 float:单精度型 double:双精度型 const:定义常量 typedef:类...

雄县15630214562: C++中const的用法详解 -
元俊天晴: C中的CONSTC中CONST的使用:const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一...

雄县15630214562: C语言中const的作用 -
元俊天晴: 这样想是可以,不过有以下几个问题:1,通常情况下,项目由几个程序员联合开发,声明为const会告知其他合作者,这个变量不要动.2,肯定会存在程序员离职交接的情况,这会给后来的程序员带来方便3,项目的代码可能会很多,使用这个变量的地方可以有很多处,例如几十上百处,你可能会记不住4,一旦你记不住,或者其他程序员改错了,会导致难以查出的bug.其实这些都好避免,只要你加一个const,那么对它的赋值都会带来一条编译错误,这样会在程序发布之前就得到解决.问题么,是越早发现越好解决.你现在也许还是在学习阶段,都是做数十到几百行规模的程序,不过当你将来做几万甚至几十万的规模时,你就会知道,该写而不写const是多么不友好了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网