gpt4 book ai didi

c - 指针和取消引用

转载 作者:行者123 更新时间:2023-11-30 15:50:15 27 4
gpt4 key购买 nike

#include <stdio.h>
#include <stdlib.h>


struct integer2{
int* valuePtr;
struct integer2* next;
};
typedef struct integer2* intpointer2;


int main() {

int value2 = 5;
int* dpointer = &value2;
intpointer2 intPtr2 = (intpointer2)malloc(sizeof(struct integer2));
//intPtr2->valuePtr = (int*)malloc(sizeof(int));

printf("Version1\n");
intPtr2->valuePtr = value2; //dereference
printf("intPtr2->valuePtr address %p\n",&intPtr2->valuePtr);
printf("intPtr2->valuePtr value: %d\n", intPtr2->valuePtr);
//print 5
printf("--------------------------------------------\n");

printf("Version2\n");
intPtr2->valuePtr = &value2;
printf("intPtr2->valuePtr address %p\n",&intPtr2->valuePtr);
printf("intPtr2->valuePtr value: %d\n", intPtr2->valuePtr);
printf("intPtr2->valuePtr value: %d\n", (*intPtr2).valuePtr);
//print 1834136
printf("--------------------------------------------\n");

return 0;
}

您好,我有一个关于指针和取消引用的问题

在版本 #1 中,当我输入 intPtr2->valuePtr = value2;我可以打印 5 的值

但是在版本#2 中,当我输入 intPtr2->valuePtr = &value2;我打印了一个奇怪的输出,例如 1834136

valuePtr 不是一个指针吗?我存储value2的地址应该没有问题。在 version#1 中,我只存储 int,但我可以打印 5 的值。我对此一无所知@@a

还有一个问题,1834136 是什么?它是无符号数字吗?

谢谢

最佳答案

您应该使用版本 2。但是:

printf("intPtr2->valuePtr address %p\n",&intPtr2->valuePtr);
printf("intPtr2->valuePtr value: %d\n", intPtr2->valuePtr);

第一行应该是:

printf("intPtr2->valuePtr address %p\n",intPtr2->valuePtr);

因为 valuePtr 正如你所说已经是一个指针,否则你给它的是指针的地址,这不是你想要的。我很确定您想要指针指向的地址。

第二行应该是:

printf("intPtr2->valuePtr value: %d\n", *intPtr2->valuePtr);

由于 intPtr2->valuePtr 是指针本身,但您仍然需要取消引用它才能获取实际的 int。执行 (*i​​ntPtr2).valuePtr 正是 intPtr2->valuePtr 所做的, -> 是该语法的简写,所以你' d 仍然保留 valuePtr 指针,并且仍然需要取消引用它。

示例:http://ideone.com/Fh8wwr

关于c - 指针和取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15858814/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com