C语言 为什么尽管有常量限定符声明,嵌套结构成员会发生变化?



尽管我const限定符声明,我观察到嵌套结构成员会发生变化,我可以知道任何方法可以避免嵌套结构成员在函数内部发生变化吗?

法典

#include <stdio.h>
#include <stdlib.h>
struct middle_data
{
struct base_data *int_data_ptr;
};
struct base_data
{
int value;
};
void function( const struct  middle_data const *middle_ptr)
{
middle_ptr->int_data_ptr->value= 2; // how to forbid value get alter?
struct base_data *ptr= middle_ptr->int_data_ptr;
printf("ptr->value = %dn",  ptr->value);
}
int main(int argc, char **argv)
{
struct  middle_data *middle_data_ptr;
middle_data_ptr = (struct  middle_data*)malloc(sizeof(*(middle_data_ptr)));
middle_data_ptr->int_data_ptr =malloc(sizeof(*(middle_data_ptr->int_data_ptr)));
middle_data_ptr->int_data_ptr->value=3;
function(middle_data_ptr);
printf("  middle_data_ptr->int_data_ptr->value = %dn",    middle_data_ptr->int_data_ptr->value);
free(middle_data_ptr);
free(middle_data_ptr->int_data_ptr);
return 0;
}

执行此操作的唯一方法是使结构的成员base_dataconst

对于此函数声明中的初学者

void function( const struct  middle_data const *middle_ptr)

一个限定符const是多余的。它们都意味着尖对象是常量,而不是指针本身。

所以这个限定符const意味着指向对象的数据成员也是常量,实际上你有

struct base_data * const int_data_ptr;

也就是说,您有一个常量指针,指向可能被更改的非常量对象。

如果您不希望更改指向的对象,则必须声明结构,例如

struct middle_data
{
const struct base_data *int_data_ptr;
};

相关内容

  • 没有找到相关文章

最新更新