Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指针&;解引用 #包括 #包括 结构整数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 - Fatal编程技术网

指针&;解引用 #包括 #包括 结构整数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; }

指针&;解引用 #包括 #包括 结构整数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

嗨,我有一个关于指针和解引用的问题

在版本1中,当我将
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
的地址),因为这是您将其设置为指向的。