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;