2016-11-29 111 views
1

我的问题是关于废弃一个字符指针与字符指针和整数指针

在这里工作是我的代码 -

#define MAX 10 

char s[80]="Hello"; 

int main(){ 

    char *stackValue; 

    stackValue=&s;//here I assined the address of s to stackValue 

    if(!stackValue){ 

     printf("No place for Value"); 

     exit(1); 

    } 

    else{ 

     printf("\n%s",*stackValue);//This doesn't work with * before it 

     printf("\n%s",stackValue);//This works properly 
    } 
    return 0; 
} 

在上面的代码中,我已经分配的S的地址[]以stackValue和当我打印* stackValue这是行不通的,

但如果我只打印“stackValue”工程。

当我做同样的事情整数

int main(){ 
    int i=10, *a; 
    a=&i; 
    printf("%d",*a);//this gives the value 
    printf("%d",a)//this gives the address 
    return 0; 
} 

在打印字符指针和整数指针是不同的。当我在int值中使用*时,它会给出该值,但当我将它用作字符指针时会给出错误。

帮助我吗?

回答

1

随着第一个代码段:

stackValue=&s;是不正确给定s已经是一个数组为char。如果你写这样的那么stackValue成为指针的指针为char(不是字符指针)。

修正,通过改变来stackValue=s;

而且,再次%s期望字符指针(不是指针指向char) - 这解释了为什么这不起作用 printf("\n%s",*stackValue); // this doesn't work

你需要printf("\n%s",stackValue);代替。


用第二个代码片段。因为i是单个int,不是数组。

+0

是啊,是的,但我的问题仍然存在,当我使用* stackValue它不打印S []的价值,但打印一个int值,当我打印'stackValue'时,只打印值 – uniqueNt

+0

它打印什么并不重要 - 它是未定义的行为(这意味着任何事情都可能发生)。你的代码从一开始就是错误的,所以在错误的printf中没有太多要说明的地方。 – artm

+0

我再次修改我的代码,它仍然不能做出正确的输出 – uniqueNt

0

"%s"格式说明符printf始终需要char*参数。 所以这是工作,正确的说法

printf("\n%s",stackValue); 

并在第一条语句你逝去的值,它会给你一个未定义的行为。

0

你正在尝试做的是这样的:

int main(void) 
{ 
    char a_data = "Hello, this is example"; 
    char *pa_stack[] = {a_data}; 

    printf("We have: %s\n", *pa_stack); 
}