Pointers 如何在结构中使用int*

Pointers 如何在结构中使用int*,pointers,struct,int,Pointers,Struct,Int,我得到了一个结构和一个初始化函数,如下所示: struct someStruct { int* b, r; // r is a pointer to an integer in b }; someStruct* init_struct(size_t size) { someStruct* p = (someStruct*) malloc(sizeof(someStruct)); p->b = (int*) malloc(size); p->b[0]

我得到了一个结构和一个初始化函数,如下所示:

struct someStruct {
    int* b, r;  // r is a pointer to an integer in b
};

someStruct* init_struct(size_t size) {
    someStruct* p = (someStruct*) malloc(sizeof(someStruct));
    p->b = (int*) malloc(size);
    p->b[0] = 16;
    p->r = &p->b;  // Here's the error, why?
    return p;
}

在您的代码中,
r
字段是一个整数,而不是指向整数的指针!另外,&(p->b)是指向整数(
int**
)的指针。如果希望r指向b数组中的整数,则需要这样定义结构:

并通过取消引用b(
int
)的元素来分配r指针,而不是指针本身(
int*
):

或者,如果要指向
b[0]
,则根本不取消对b的引用:

p->r = p->b;

我看C已经15天了,但我有一种奇怪的感觉,你的错误行应该更像:

p->r = &(p->b);
不过这只是一种预感。我现在没时间考试

这样就意味着您将把b*的地址存储到p->r中

但是对于指针,它们保存的是地址,而不是解引用的值,所以您可以这样做

p->r = p->b;

除非您试图获取点所在的地址,而不是指针指向的地址。

int*b,r
-此状态表示
b
是指向int变量的指针,
r
是int变量。如果您想将r声明为指向int变量的指针,您必须遵循下面提到的任何一种方法

第一路

int* b = NULL;
int* a = NULL;
第二条路

int *b = NULL, *a = NULL;
第三条路

typedef int* INT_POINTER;
INT_POINTER a = NULL, b = NULL;
不要使用宏
#define
而不是
typedef

最好的方法是使用
typedef
,以避免混淆


赋值语句也应该像
p->r=&(p->b[0])

它不应该没有符号吗?比如
p->r=p->b
为什么要取消对pThanks的引用,错误在于我没有把“r”也作为指针。将来我应该在变量旁边写“*”,而不是在数据类型旁边。这让人有点困惑。
int *b = NULL, *a = NULL;
typedef int* INT_POINTER;
INT_POINTER a = NULL, b = NULL;