C++ 如何访问和分配struct上的int指针数据类型的值?

C++ 如何访问和分配struct上的int指针数据类型的值?,c++,c,pointers,struct,C++,C,Pointers,Struct,如果我想给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);

如果我想给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;
} 
#包括
int main(int argc,const char*argv[]{
//在这里插入代码。。。
结构az{
int num1;
int*num2;
};
结构az试验;
test.num1=20;
printf(“\n%d”,test.num1);
返回0;
} 

要将值分配给
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

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

您必须分配内存,然后为此内存分配一个值:

test.num2 =new int(20);
但是,请不要忘记在完成以下操作时删除此分配的内存:

delete test.num2;

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

您可以使用与
num1
相同的方式分配
num2
。当然,因为它不是
int
而是
int*
,所以不能将
20
赋值给它-您可以指定一些
int
变量的地址:

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

int i;
test.num2 = &i;
在您的示例中,num2通常用作指向动态分配数组的指针。然而,在这种情况下,num2和num1都不是一个好名字。让我们将动态数组类型声明为具有字段长度和项的记录:

如果我们有一个数组类型的变量,在给它的元素赋值之前,我们必须首先为数组分配内存。在C语言中,这通常是通过函数malloc完成的。但是,此函数很容易出错,因此最好定义一个宏函数,以简化内存分配:

#define NEW_ARRAY(ptr, n) (ptr) = malloc((n) * sizeof (ptr)[0])
调用新数组后,我们可以为数组赋值:

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*
结构的成员变量或
int*
变量本身?您可以用与分配任何其他值相同的方式分配它。使用赋值(
=
)运算符。也许你的意思是你应该分配给它什么。当然,我们不能回答这个问题,因为只有您可以决定程序应该做什么(同样,我们不能告诉您
num1
应该是
30
而不是
20
)。我们唯一能说的是,该值必须是
int
指针。常见来源:
malloc
现有
int
变量的调用或地址。*(test.num2)=20;这是UB。您必须首先分配内存。请不要在同一代码中混合使用新内存和空闲内存。malloc&&free | | new&&delete
free(a.items);