读书人

指向恒量的指针

发布时间: 2013-07-04 11:45:32 作者: rapoo

指向常量的指针
函数代码如下


void showarray(const int a[] ,int n )
{
int i;
int * p;
p = a;
for(i = 0;i < n ;i++)
{
printf("%d -> %d\n",i+1,p[i]++);
}
}


请问这段代码是否正确,为什么我在 DEV_C++上面可以正常运行?
但是在 C Primer plus 中说到:

const double locked[4] = {0.08,0.075,0.725,0.07 };
double * p;
p = locked; //书中指出这一句是不和法的,只有非常量数据的地址才能赋给普通指针

C
[解决办法]
编译不过的应该更符合标准.
[解决办法]
可能标准不同
[解决办法]
const double locked[4] = {0.08,0.075,0.725,0.07 };
只是说locked所指向内存内容只可读,至于locked,可以赋给普通指针。


[解决办法]
一般会过,但是编译器会发出警告,因为这样的用法是有隐患的。

引用:
函数代码如下

void showarray(const int a[] ,int n )
{
int i;
int * p;
p = a;
for(i = 0;i < n ;i++)
{
printf("%d -> %d\n",i+1,p[i]++);
}
}


请问这段代码是否正确,为什么我在 DEV_C++上面可以正常运行?
但是在 C Primer plus 中说到:

const double locked[4] = {0.08,0.075,0.725,0.07 };
double * p;
p = locked; //书中指出这一句是不和法的,只有非常量数据的地址才能赋给普通指针

[解决办法]
C++ 错误。
……/main.cpp:11:9: error: invalid conversion from 'const int*' to 'int*' [-fpermissive]
C 警告,可能是为了照顾老代码,所以没设为错误。
……/main.c:9:7: warning: assignment discards 'const' qualifier from pointer target type [enabled by default]


楼主是哪个版的编译器?
[解决办法]
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!

读书人网 >C语言

热点推荐