Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
如何在C中获取structer中的指针成员?_C - Fatal编程技术网

如何在C中获取structer中的指针成员?

如何在C中获取structer中的指针成员?,c,C,下面的第一个代码块在我获取char指针类型时工作。但是对于第二个代码块,当我尝试获取内部指针的类型时,它不起作用。请有人向我解释一下,为什么获取整数指针不起作用?谢谢 // FIRST CODE BLOCK #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { struct machine { char *memory; };

下面的第一个代码块在我获取char指针类型时工作。但是对于第二个代码块,当我尝试获取内部指针的类型时,它不起作用。请有人向我解释一下,为什么获取整数指针不起作用?谢谢

// FIRST CODE BLOCK

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

int main()
{
    struct machine
    {
        char *memory;   
    };

    struct machine CPUtype;

    struct machine *mpu641;

    CPUtype.memory="QWERTY";
    mpu641=&CPUtype;

    printf("The value i %s\n",mpu641->memory);

    return 0;
}

// SECOND CODE BLOCK

int main()
{
    struct machine
    {
        int *memory;    
    };

    struct machine CPUtype;

    struct machine *mpu641;

    CPUtype.memory=5;
    mpu641=&CPUtype;

    printf("The value i %d\n",mpu641->memory);

    return 0;
}
//第一个代码块
#包括
#包括
#包括
int main()
{
结构机
{
字符*内存;
};
结构机CPUtype;
结构机*mpu641;
CPUtype.memory=“QWERTY”;
mpu641=&CPUtype;
printf(“值i%s\n”,mpu641->memory);
返回0;
}
//第二代码块
int main()
{
结构机
{
int*内存;
};
结构机CPUtype;
结构机*mpu641;
CPUtype.memory=5;
mpu641=&CPUtype;
printf(“值i%d\n”,mpu641->memory);
返回0;
}

您尝试为指针变量分配一个整数。这是行不通的

第一个代码:

CPUtype.memory="QWERTY";
这很好,因为
“QWERTY”
是一个字符串文本,第一个字符的地址被分配给
char*
成员

第二代码:

CPUtype.memory=5;
在这里,您尝试将一个整数分配给指针变量。因此,您将从编译器中获得一些消息。 尝试分配一个地址,它应该可以正常工作

你应该如何做到这一点,取决于你程序的其余部分。 您有多种选择:

// assign address of some variable
int intvar;
mpu641->memory = &intvar;

// dynamic memory allocations
CPUtype.memory = malloc(sizeof(int));

// fixed address of some registers etc.
// Requires cast and is not portable
CPUtype.memory = (int *) 0x100000
此外,打印错误:

printf("The value i %d\n",mpu641->memory);
您试图打印一个整数,但传递了一个指向整数的指针。要获取指向的值,需要使用以下命令:

printf("The value i %d\n", *(mpu641->memory));

欢迎来到SO。“不工作”不是一个有用的问题描述。如果某些内容未编译,您将收到错误消息。请编辑问题以删除
此处输入代码
位。并修正标题中的“结构”。在第一段代码中,您在某个合理的地方指出了这一点。第二个块应该从编译器得到很多警告,并在运行时崩溃,因为指针没有指向任何正常的地方。地址5不正常!先去了解更多关于指针的信息。如果您喜欢技术写作:第一个赋值是合法的,但它只是一个边界“罚款”,因为字符串文字是常量对象,任何通过非常量指针修改它的尝试都是无效的。一个好的编译器会警告这样的赋值。@TobySpeight True,但在给定的代码中,没有使用指针进行写访问。C字符串中的文字也不是C++中的const类型。因此,从技术上讲,分配给非常量指针是可以的。