[英]Why nested structure member get alter despite const qualifier declaration?
盡管我聲明了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 = %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;
}
唯一的方法是將 struct base_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;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.