指针&;解引用 #包括 #包括 结构整数2{ int*估价师; 结构整数2*next; }; typedef结构整数2*intpointer2; int main(){ 整数值2=5; int*dpointer=&value2; intpointer2 intPtr2=(intpointer2)malloc(sizeof(struct integer2)); //intPtr2->valuePtr=(int*)malloc(sizeof(int)); printf(“版本1\n”); intPtr2->valuePtr=value2;//取消引用 printf(“intPtr2->valuePtr地址%p\n”,&intPtr2->valuePtr); printf(“intPtr2->valuePtr值:%d\n”,intPtr2->valuePtr); //打印5 printf(“------------------------------------------------------------\n”); printf(“版本2\n”); intPtr2->valuePtr=&value2; printf(“intPtr2->valuePtr地址%p\n”,&intPtr2->valuePtr); printf(“intPtr2->valuePtr值:%d\n”,intPtr2->valuePtr); printf(“intPtr2->valuePtr值:%d\n”,(*intPtr2.valuePtr); //打印1834136 printf(“------------------------------------------------------------\n”); 返回0; }
嗨,我有一个关于指针和解引用的问题 在版本1中,当我将指针&;解引用 #包括 #包括 结构整数2{ int*估价师; 结构整数2*next; }; typedef结构整数2*intpointer2; int main(){ 整数值2=5; int*dpointer=&value2; intpointer2 intPtr2=(intpointer2)malloc(sizeof(struct integer2)); //intPtr2->valuePtr=(int*)malloc(sizeof(int)); printf(“版本1\n”); intPtr2->valuePtr=value2;//取消引用 printf(“intPtr2->valuePtr地址%p\n”,&intPtr2->valuePtr); printf(“intPtr2->valuePtr值:%d\n”,intPtr2->valuePtr); //打印5 printf(“------------------------------------------------------------\n”); printf(“版本2\n”); intPtr2->valuePtr=&value2; printf(“intPtr2->valuePtr地址%p\n”,&intPtr2->valuePtr); printf(“intPtr2->valuePtr值:%d\n”,intPtr2->valuePtr); printf(“intPtr2->valuePtr值:%d\n”,(*intPtr2.valuePtr); //打印1834136 printf(“------------------------------------------------------------\n”); 返回0; },c,visual-studio-2010,pointers,dereference,C,Visual Studio 2010,Pointers,Dereference,嗨,我有一个关于指针和解引用的问题 在版本1中,当我将intPtr2->valuePtr=value2 我可以打印5的值 但是在版本2中,当我把intPtr2->valuePtr=&value2 我打印了一个奇怪的输出,比如1834136 valuePtr不是指针吗?我存储value2的地址应该没有问题。 在版本1中,我只存储int,但我可以打印5的值。 “我对此一无所知@@a” 还有一个问题,1834136是什么?它是一个无符号数字吗 谢谢您应该使用版本2。但是: #include <s
intPtr2->valuePtr=value2代码>
我可以打印5的值
但是在版本2中,当我把intPtr2->valuePtr=&value2代码>
我打印了一个奇怪的输出,比如1834136
valuePtr不是指针吗?我存储value2的地址应该没有问题。
在版本1中,我只存储int,但我可以打印5的值。
“我对此一无所知@@a”
还有一个问题,1834136是什么?它是一个无符号数字吗
谢谢您应该使用版本2。但是:
#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;
}
第一行应该是:
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 address %p\n",&intPtr2->valuePtr);
printf("intPtr2->valuePtr value: %d\n", intPtr2->valuePtr);
printf("intPtr2->valuePtr address %p\n",intPtr2->valuePtr);
由于intPtr2->valuePtr
是指针本身,但您仍然必须取消对它的引用以获得实际的int。Doing(*intPtr2)。valuePtr
正是intPtr2->valuePtr
所做的,->
是该语法的缩写,因此,您仍然需要使用valuePtr
指针,并且仍然需要取消对它的引用
示例:%d
不是指针的正确格式说明符。否,我正在尝试打印版本2中的值5,但不允许这样做。在这种情况下,您需要取消对它的引用以获取它所指向的值。您将值5
分配给指针成员intPtr2->valuePtr
是不正确的。我很有信心你想要一个存储在那里的地址;不是文字整数值。您的第一个printf()
是打印指针的地址,而不是指针中的地址。嗯,好的。。。我在第一行还有一个问题,&inPtr->valuePtr是valuePtr的地址吗?intPtr->valuePtr是intPtr的地址?&inPtr->valuePtr
是valuePtr
的地址,intPtr->valuePtr
是指向value2
的指针(在您的例子中,返回value2
的地址),因为这是您将其设置为指向的。