使用 char 指针和整数指针

working with char pointer and integer pointer

我的问题是关于取消引用 char 指针

这是我的代码 -

#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' 那行得通。

当我对 Integer 做同样的事情时

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 值中使用 * 时,它给出了值,但当我将它用作 char 指针时却给出了错误。

帮帮我?

第一个代码片段:

stackValue=&s; 不正确,因为 s 已经是一个要转换为字符的数组。如果你这样写然后 stackValue 变成 pointer to pointer to char (not pointer to char).

通过更改为 stackValue=s;

来解决这个问题

此外,再次 %s 期待一个指向 char 的指针(不是指向指向 char 的指针的指针)- 这解释了为什么这不起作用 printf("\n%s",*stackValue); // this doesn't work

您需要 printf("\n%s",stackValue);


第二个代码片段。

a=&i; 可以,因为 i 是单个 int,不是数组。

printf"%s" 格式说明符总是需要一个 char* 参数。 所以这是有效且正确的陈述

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

并且在第一个语句中你正在传递值所以它会给你未定义的行为。

您要执行的操作是:

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

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