如何在struct中使用int *

时间:2012-06-22 13:16:41

标签: 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] = 16;
    p->r = &p->b;  // Here's the error, why?
    return p;
}

3 个答案:

答案 0 :(得分:0)

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

struct someStruct {
    int *b, *r;
}

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

p->r = &(p->b[0]);

如果您想指向b[0]

,请不要取消引用b
p->r = p->b;

答案 1 :(得分:0)

自从我看了C之后已经过了15天,但我有这种奇怪的感觉,你的错误行看起来应该更像:

p->r = &(p->b);

虽然这只是一种预感。我没有时间在这一秒进行测试。

这就是说你将把b *的地址存储到p-> r

但是使用指针,它们会保存地址,而不是取消引用的值,因此您可以执行

p->r = p->b;

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

答案 2 :(得分:0)

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]);

类似