为什么嵌套结构成员在const限定符声明之外获得alter?
尽管我声明了为什么嵌套结构成员在const限定符声明之外获得alter?,c,struct,malloc,free,C,Struct,Malloc,Free,尽管我声明了const限定符,我还是观察到嵌套结构成员get alter,请问有什么方法可以避免函数中嵌套结构成员get alter 代码 #include <stdio.h> #include <stdlib.h> struct middle_data { struct base_data *int_data_ptr; }; struct base_data { int value; }; void function( const struct
const
限定符,我还是观察到嵌套结构成员get alter,请问有什么方法可以避免函数中嵌套结构成员get alter
代码
#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 = %d\n", 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 = %d\n", middle_data_ptr->int_data_ptr->value);
free(middle_data_ptr);
free(middle_data_ptr->int_data_ptr);
return 0;
}
#包括
#包括
结构中间数据
{
结构基本数据*int数据\u ptr;
};
结构基础数据
{
int值;
};
void函数(常量结构中间值\u数据常量*中间值ptr)
{
middle\u ptr->int\u data\u ptr->value=2;//如何禁止value get alter?
结构基本数据*ptr=中间数据->内部数据\u ptr;
printf(“ptr->value=%d\n”,ptr->value);
}
int main(int argc,字符**argv)
{
结构中间数据*中间数据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));
中间数据->内部数据->值=3;
功能(中间数据ptr);
printf(“中间数据->内部数据->值=%d\n”,中间数据->内部数据->值);
自由(中间数据);
自由(中间数据\u ptr->内部数据\u ptr);
返回0;
}
实现这一点的唯一方法是将结构的成员base\u data
作为const
作为此函数声明中的启动器
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;
};
如果不将成员设置为
const
,则无法执行此操作。