近日在做RAM优化的工作,移除了大量不必要的static但是还是离任务要求差距甚远, 于是想着const一些大数组,在此之前测试了一下如何用指针正确间接的给const变量写值:
- 只用const修饰变量的话 运行会崩溃
#include <stdio.h>
const int global[10]= {1,2,3,4,5,6,7,8,9,10};
int main()
{
for(char i=0;i<10;i++)
{
printf("global = %d\t\n",*(global+i));
}
printf("using pointer to modifiy the global[]\n");
int *p = (int *)&global;
for(char i = 0; i < 10 ;i++)
{
*(p+i) = 2;
}
for(char i=0;i<10;i++)
{
printf("%d\n",*(global+i));
}
getchar();
return 0;
}
运行结果:
写值失败
- 同时用const 和volatile 则可以成功
#include <stdio.h>
const volatile int global[10]= {1,2,3,4,5,6,7,8,9,10};
int main()
{
for(char i=0;i<10;i++)
{
printf("global = %d\t\n",*(global+i));
}
printf("using pointer to modifiy the global[]\n");
int *p = (int *)&global;
for(char i = 0; i < 10 ;i++)
{
*(p+i) = 2;
}
for(char i=0;i<10;i++)
{
printf("%d\n",*(global+i));
}
getchar();
return 0;
}
运行结果:
写值成功。