#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("Version1n");
intPtr2->valuePtr = value2; //dereference
printf("intPtr2->valuePtr address %pn",&intPtr2->valuePtr);
printf("intPtr2->valuePtr value: %dn", intPtr2->valuePtr);
//print 5
printf("--------------------------------------------n");
printf("Version2n");
intPtr2->valuePtr = &value2;
printf("intPtr2->valuePtr address %pn",&intPtr2->valuePtr);
printf("intPtr2->valuePtr value: %dn", intPtr2->valuePtr);
printf("intPtr2->valuePtr value: %dn", (*intPtr2).valuePtr);
//print 1834136
printf("--------------------------------------------n");
return 0;
}
嗨,我有一个关于指针&废弃
在版本#1中,当我把intPtr2->valuePtr = value2;
我可以打印5
但是在版本#2中,当我把intPtr2->valuePtr = &value2;
我输出了一个奇怪的输出,比如1834136
valuePtr不是指针吗?我存储value2的地址应该没有问题。在版本#1中,我只存储int,但我可以打印5的值。我不知道这个@@a
还有一个问题,1834136是什么?它是一个无符号数字吗?
谢谢
您应该使用版本2。但是:
printf("intPtr2->valuePtr address %pn",&intPtr2->valuePtr);
printf("intPtr2->valuePtr value: %dn", intPtr2->valuePtr);
第一行应该是:
printf("intPtr2->valuePtr address %pn",intPtr2->valuePtr);
因为valuePtr
已经是一个指针,因为你说,否则你给它的指针的地址,这不是你想要的。我很确定你想要的是指针指向的地址。
第二行应该是:
printf("intPtr2->valuePtr value: %dn", *intPtr2->valuePtr);
因为intPtr2->valuePtr
是指针本身,但您仍然需要对其解引用以获得实际的int。执行(*intPtr2).valuePtr
正是intPtr2->valuePtr
所做的,->
是该语法的简写,因此您仍然保留valuePtr
指针,并且仍然需要对其解引用。
示例:http://ideone.com/Fh8wwr