如何访问结构中的 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;
【问题讨论】:
您不确定如何单独处理struct
的int*
成员变量或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 通常用作指向动态分配数组的指针。但是,在这种情况下,num2 和 num1 都不是一个好名字。让我们将动态数组类型声明为具有字段 length 和 items 的记录:
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 指针数据类型并为其赋值?的主要内容,如果未能解决你的问题,请参考以下文章