2016-11-29 3 views
1

での作業私の質問はここでchar型のポインタchar型のポインタと整数ポインタ

を参照解除についての私のコードです - 私はSのアドレスが割り当てられている上記のコードで

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

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

と同じことを行うchar型のポインタと整数ポインタを印刷することは異なっています。私がint値で*を使用すると、値を与えますが、charポインタとして使用するとエラーが発生します。

お手伝いしますか?最初のコードスニペットで

答えて

1

stackValue=&s;s既にcharへの配列で与えられる不正確です。あなたがそのように書くなら、stackValueポインタへのポインタへのポインタ(charへのポインタではない)になります。これはあなたが代わりにprintf("\n%s",stackValue);が必要 printf("\n%s",*stackValue); // this doesn't work

機能しない理由を説明 - stackValue=s;

に変更することにより、また、再び%sはcharへのポインタを(char型へのポインタへのポインタではありません)期待していること

修正。


2番目のコードスニペットを使用してください。

a=&i;iは単一のintであるため、配列ではありません。

+0

、および私は 'stackValue'だけを印刷すると値 – uniqueNt

+0

が印刷されても問題ありません。何も起こらないことを意味する未定義の動作です。あなたのコードは最初から間違っていますので、間違ったprintfで詳述する必要はありません。 – artm

+0

もう一度私のコードを修正しても正しい出力が得られない – uniqueNt

0

のフォーマット指定子は、常にchar*引数が必要です。 ので、これが動作していると、正しい文の

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

、それはあなたに未定義の動作が得られますので、最初の文では、値を渡しています。何をしようとする

0

はこれです:ええ、それはですが、私の質問はまだ残っている、私は* stackValueを使用する場合、それは[] sの値を印刷するが、int型の値を印刷するdoesntの

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

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