如何访问结构中的 int 指针数据类型并为其赋值?

Posted

技术标签:

【中文标题】如何访问结构中的 int 指针数据类型并为其赋值?【英文标题】:How do access and assign value for an int pointer datatype on struct? 【发布时间】:2016-08-03 05:34:06 【问题描述】:

如果我想给 int *num2 赋值,我该怎么做?

#include <stdio.h>

int main(int argc, const char * argv[]) 
    // insert code here...
    struct az 
        int num1;
        int *num2;
    ;
    struct az test;
    test.num1 =20;
    printf("\n %d",test.num1);
    return 0;
 

【问题讨论】:

您不确定如何单独处理structint* 成员变量或int* 变量? 您可以像分配任何其他值一样分配它。使用赋值 (=) 运算符。也许您的意思是 what 您应该分配给它。当然我们不能回答这个问题,因为只有你可以决定程序应该做什么(同样我们不能告诉你num1应该是30而不是20)。我们唯一可以说的是值必须是int 指针。常见来源:malloc 调用或现有 int 变量的地址。 【参考方案1】:

int *num2; 是指向内存中某个包含int 值的位置的指针。由于您只是声明了一个没有分配任何内存的指针,因此它只是指向任何内容(或随机位置)。

你必须分配内存然后给这个内存赋值:

test.num2 =new int(20);

但是,完成后不要忘记删除此分配的内存:

delete test.num2;

真正的问题在这里,你真的想要那个指针吗?可能不会。

【讨论】:

【参考方案2】:

您可以像分配num1 一样分配num2。当然,因为它不是int,而是int*,所以你不能给它赋值20——你可以给它赋值int变量的地址:

struct az 
    int num1;
    int *num2;
;
struct az test;
test.num1 = 20;

int i;
test.num2 = &i;

【讨论】:

【参考方案3】:

要将值分配给test.num2 指向的整数,您必须取消引用带有星号的指针,如下所示:

test.num2 = new int(20); // Allocates memory and sets the pointer to this memory
*(test.num2) = 10; // Assign a value of 10 to the int that test.num2 points to

要为指针分配地址,您必须为它分配另一个指针,或者通过使用 & 号引用 int 来分配它的值:

test.num2 = new int(20); // Allocates memory and sets the pointer to this location
int *ptr = new int(10);
delete test.num2; // Free memory that test.num2 pointed to
test.num2 = ptr // Makes test.num2 point to the same int as ptr
int x = 10;
test.num2 = &x; // Makes test.num2 point to x

【讨论】:

*(test.num2) = 20;这是UB。你必须先分配内存 请不要在同一个代码中混用新的和免费的。 malloc&&free ||新建&&删除【参考方案4】:

在您的示例中,num2 通常用作指向动态分配数组的指针。但是,在这种情况下,num2num1 都不是一个好名字。让我们将动态数组类型声明为具有字段 lengthitems 的记录:

struct Array 
   int length;
   int *items;
;
typedef struct Array Array;

如果我们有一个数组类型的变量a,在我们可以给它的元素赋值之前,我们必须首先为数组分配内存。在 C 中,这通常使用函数 malloc 来完成。然而,这个函数使用起来很容易出错,所以最好定义一个宏函数来简化内存分配:

#define NEW_ARRAY(ptr, n) (ptr) = malloc((n) * sizeof (ptr)[0])

调用NEW_ARRAY后,我们可以为数组赋值:

int length;
Array a;

length = 20;
a.length = length;
NEW_ARRAY(a.items, length);
a.items[0] = 37;
a.items[1] = 19;
...

当我们处理完数组后,我们可以释放元素使用的内存:

free(a.items);

【讨论】:

以上是关于如何访问结构中的 int 指针数据类型并为其赋值?的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何给结构体指针赋值?

我可以使用 C++ 中的指针访问二维数组的元素吗?

如何在数据表中动态创建列并为其赋值?

Numpy:如何在 numpy 中选择项目并为其赋值

如何在构造函数中访问类变量以在不使用 C++ 中的 this 指针的情况下分配它们

C++结构体指针数组如何分配空间,用new