指向char指针的void void指针

时间:2014-12-24 14:30:37

标签: c

我有两个指针。一个char指针,带有字符串" test"和一个void指针。 我试图让pointer指向string的地址。 这是我的代码:

#include <stdio.h>

int main(){
    void *pointer = NULL;
    char *string = "test";
    *(char*)pointer = &string;

    printf("The string address: %p\n", string);
    printf("The string: %s\n", string);
    printf("The pointer address: %p\n", pointer);
    printf("The pointer points to: %p", *(char*)pointer);

    return 0;
}

当我将pointer设置为等于第6行string的地址时,我得到makes integer from pointer without a cast。我该怎么做?

编辑: 我正在打印错误的地址。我的意思是printf行看起来像这样:

#include <stdio.h>

int main(){
    void *pointer = NULL;
    char *string = "test";
    pointer = &string;

    printf("The string address: %p\n", &string);
    printf("The string: %s\n", string);
    printf("The pointer address: %p\n", &pointer);
    printf("The pointer points to: %p", pointer);

    return 0;
}

现在正确打印出来:

  

字符串地址:0028FF18
字符串:test
指针地址:   0028FF1C
指针指向:0028FF18

因此stringpointer是单独的指针,pointer指向string

4 个答案:

答案 0 :(得分:2)

为什么不简单地做

#include <stdio.h>

int main(){
    void *pointer = NULL;
    char *string = "test";
    pointer = &string; // point to the address of string
    printf("The string address: %p\n", string);
    printf("The string: %s\n", string);
    printf("The pointer address: %p\n", pointer);
    printf("The pointer points to: %p\n", (char*)(*(char**)(pointer)));

    return 0;
}

答案 1 :(得分:1)

void *pointer = NULL;

pointer这里是void类型的指针。在解除引用之前,您需要首先确保此指针指向某个有效的内存位置。

pointer = string;

PS:这里string是一个字符串文字,因此如果您尝试写入此内存位置,则它是只读的,您可能会遇到分段错误。

答案 2 :(得分:1)

如果您想将pointer指向string所针对的字符串,

pointer = string;

作品。

如果您想将pointer指向string

pointer = &string;

就足够了。

您实际在做的是投射指向char*的指针,并通过它指定未定义的行为pointerNULL
实际上,从&stringchar的转换可能也不起作用。

答案 3 :(得分:0)

如果你想要一个指向char指针string的指针,那么你应该这样做:

pointer = &string

如果你想要一个指向字符串“test”的指针,那么你应该这样做:

pointer = string