2016-08-26 3 views
-4

私はにこれらのステートメントで4を印刷する方法Cでのこれらのステートメントによって、ダブルポインターで答え4を得ることはできますか?

int **ptr; 
printf("%d\n",**ptr); 

あるに質問を得ましたか。

ここには2つのステートメントがあり、答えは4である必要があります。

2つのステートメント間にステートメントを追加できますが、新しい変数を宣言することはできません。

mallocといっしょにたくさん試しましたが、これを解決できませんでした。

+5

あなたは、いくつかのサンプルコードを提供していただけますか? –

+0

先生に依頼して、ポインタへのポインタを説明するように指示します。この割り当てを引き渡す前にポインタを指示する必要があります。 – Lundin

+2

@Lundin OPは書いています:_ 2つのステートメントの間にステートメントを追加できますが、新しい変数を宣言しません。 – LPs

答えて

3

OK、あなた要件ごとに、あなたは

int **ptr; 
puts("4"); 
exit(0); 
printf("%d\n",**ptr); 

実際答えを書き込むことができます。

いけないだけで要件を適切に理解しなくてもコードを書いてみます。まず、型指定されたコード行を得ることの目的を理解してください。場合は、あなたがポインタへのポインタの使用方法を探している

あなたはなぜ部分を理解していない場合は、」、それを

int **ptr = NULL; 
ptr = malloc(sizeof(**ptr));  //allocate memory to ptr first 
if (ptr)       //malloc is success? 
{ 
    *ptr = malloc(sizeof*ptr);  //allocate memory to *ptr 
} 

if (*ptr) **ptr = 4;     //finally, put the value in **ptr 
printf("%d\n",**ptr);    //go ahead, print it 

free(*ptr);    //don't forget this 
free(ptr);    //don't forget that, either 

ような何かを試すことができますが、 どのように部分を取得するのは難しいでしょう。

P.S-コードには、これを理解し、さらに読むための "ポインタ"を得るためのインラインコメントがあります。

4

#include <stdio.h> 
#include <stdlib.h> 
int main() { 
    int **ptr; 
    ptr = malloc(sizeof(int *)); 
    *ptr = malloc(sizeof(int)); 
    **ptr = 4; 
    printf("%d\n", **ptr); 
} 
1
#include <stdio.h> 

int main(void){ 
    int **ptr; 
    ptr = (int *[]){&(int){ 4 }}; 
    printf("%d\n",**ptr); 
    return 0; 
} 
+0

OPが分かりましたらお気軽にどうぞ。おそらく複合リテラルへのリンクを追加するほうが役に立つかもしれません。 – LPs

+0

[複合リテラル](http://stackoverflow.com/documentation/c/4135/compound-literals#t=201608260648364008599) – BLUEPIXY

関連する問題