2014-12-24 82 views
2

我有两个指针。 A char带有字符串“测试”的指针和void指针。 我试图让pointer指向string的地址。 这里是我的代码:指向字符指针的void-pointer指针

#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等于的string第6行,我得到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
字符串:测试
指针地址: 0028FF1C
指针指向:0028FF18

所以stringpointer是分开的指针a nd pointer指向string

+0

'string'的地址不是一个对象,因此无法解决。 – Deduplicator

+2

一个简单而优雅,'pointer = string'会做。 –

+0

'pointer = string'虽然改变了指针的位置。我希望'指针'位于同一个内存位置,但指向(包含)'string'的地址。 – tem887

回答

1

如果你想点pointer在由string解决的字符串,

pointer = string; 

作品。

如果你想点pointerstring

pointer = &string; 

就足够了。

你实际上正在做的是将指针指向char*,并通过它进行赋值,这是未定义的行为,因为pointerNULL
实际上,从&stringchar的转换可能也不起作用。如果你想有一个指向字符串“测试”的指针

pointer = &string 

,那么你:

+0

谢谢,这是有道理的。我相信我也打印了错误的地址,这也是我最困惑的地方。 – tem887

+0

问题。在'pointer = string'中,不是简单地指定string到字符串数组的第一个索引的指针吗?我可能完全错误。 – beckah

+0

@beckah:不会。尽管它会衰减(假设你指的是元素而不是索引),就像在大多数情况下一样。 – Deduplicator

1
void *pointer = NULL; 

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

pointer = string; 

PS:这里string是一个字符串字面所以它是只读的,如果你试图写入这个内存位置可能会得到分段错误。

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; 
} 
0

如果你想有一个指向字符指针string指针,那么你应该这样做应该这样做:

pointer = string