Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 二维数组地址_C - Fatal编程技术网

C 二维数组地址

C 二维数组地址,c,C,我有如下两种结构 typedef struct Rsp_s { u8 code; u8 Count; }Rsp_t; typedef struct Field_s { u8 State; u8 present; u8 previous; u8 event; } Field_t 那我有 Rsp_t *rsp; Field_t data[3][7] 我希望数据[0][0]遵循rsp->Count。 我该怎么做

我有如下两种结构

typedef struct Rsp_s {
    u8    code;
    u8 Count;
}Rsp_t;

typedef struct Field_s {
     u8    State;
     u8    present;
     u8    previous;
     u8    event;
} Field_t
那我有

Rsp_t *rsp;
Field_t data[3][7]
我希望
数据[0][0]
遵循
rsp->Count
。 我该怎么做

data = (Field_t *)(&(rsp->Count) +1);

不要这样做。

你的作业是错误的。您想将
b[0][0]
的地址分配给
a
,因此:

a = &b[0][0];

当您声明这样的变量时

int b[3][7];
。。。如果
静态
,它的内存位置由编译器指定;如果
自动
自动,它的内存位置由堆栈指定,因此不能通过编程更改。不过,您可以使用指针访问此内存,并从中进行读写

int (*a)[7] = b;
以下是等效的:

b[0][0] = b[1][1];
a[0][0] = a[1][1];

你已经交换了订单。您还需要将
a
声明为指向int指针的指针
&b[0][0]=a
尝试将
&b[0][0]
的值设置为
a
。但是
&b[0][0]
无法修改,因为它是固定的。因此您看到的错误。实际上我错了,
a=&b[0][0]
似乎是合法的,但你肯定不能用
[][]
@Ben取消对它的引用,当然可以;您只需要进行一些转换,如下所示:
((int**)a)[0][0]=1并不是说这可能是一件有用的事情,但这是C,你可以开枪打自己的脚。@user3821434我想你不知道你在做什么want@user3821434,安东在上面所做的就是这样。这样做并不能用a替换b的基,而是将a指向b的基。我认为您还应该补充以下内容是合法的并且有效的:
int*a=(int*)b[0]获取指向连续内存的一维指针。我总是用
int*a=&b[0][0]
因为我更喜欢它,但每个人都有自己的想法。为了澄清,当他说下面的说法是等价的时,另一种说法是
&pb[x][y]=&b[x][y]
我以前从未见过这样的:
int(*pb)[7]
。你到底在这里干什么?@sherrellbc
int(*a)[7]
声明了一个变量,一个指向二维数组的指针,大小为
[n][7]
int*a[7]
将声明7个变量,每个变量都是指向单个
int
或1D
int
数组的指针,大小为
[n]