gpt4 book ai didi

c - C中const指针的初始化

转载 作者:行者123 更新时间:2023-11-30 18:12:20 27 4
gpt4 key购买 nike

我想创建一个指向 C: 中某些数据的 const 指针

struct s {
int f;
} a = { 1 };

struct s * const c = (struct s * const)&a;

但这会导致错误错误:初始化器元素不是常量。我想这是因为地址不是编译常量,这在某些方面仍然可能吗?

const 指针只能显式赋值吗? (如void * const * x = 0xbfc0d878)

编辑:我对我给出的问题的糟糕描述表示歉意,这实际上在 C 中有效。我试图重写该部分的一个更简单的版本,该版本不起作用,但它有效所以我认为最好把实际的代码贴出来,没那么长。

在文件protocol.h中:

#define NRING 2
typedef struct entity {
char id[9]; // 8th char max, 9th is 0
char ip_self[16];
uint16_t udp;
uint16_t tcp;
char ip_next[NRING][16];
uint16_t port_next[NRING];
char mdiff_ip[NRING][16];
uint16_t mdiff_port[NRING];
} entity;

extern entity * const ent;

在文件protocol.c中:

entity _ent_;
entity * const ent = (entity * const)&_ent_;

在文件_protocol_interface.h_中:

#include "protocol.h"
typedef struct info_t {
const char id[9];
const char ip_self[16];
const uint16_t udp;
const uint16_t tcp;
const char ip_next[NRING][16];
const uint16_t port_next[NRING];
const char mdiff_ip[NRING][16];
const uint16_t mdiff_port[NRING];
} info_t;

extern info_t * const info;

在文件_protocol_interface.c_中:

info_t * const info = (info_t * const)ent;

错误来自_protocol_interface.c_:

error: initializer element is not constant
info_t * const info = (info_t * const)ent;

编辑2:这有效:

info_t * const info = (info_t * const)&_ent_; // _ent_ is of type entity

虽然这不是

info_t * const info = (info_t * const)ent;  // ent is of type entity * const

最佳答案

编译完成

#include <iostream>
using namespace std;
struct s {
int f;
} a = { 1 };

struct s const * c = &a;
int main() {
// your code goes here
return 0;
}

关于c - C中const指针的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36852564/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com