-4

私はCの初心者です。

main() {    
   int *a-ptr = (int *)malloc(int); 
   *a-ptr = 5;
   printf(“%d”, *a-ptr);
}

問題は、これは5を印刷することが保証されているかどうかです。

答えは:いいえ、2つの理由から:

  • 変数の名前に「-」を使用することはできません
  • 「intストレージを割り当てませんでした」

その2点目がわかりません。この行でストレージが割り当てられていませんか?
int *a-ptr = (int *)malloc(int);

4

3 に答える 3

2

mallocタイプではなくサイズを受け入れます。あなたがする必要があるでしょうmalloc(sizeof(int))

于 2012-12-17T19:31:38.563 に答える
2
    main() {    // wrong. Should return int
int main() {    // better

int *a-ptr =  //wrong. no dashes in variable names
int *a_ptr =  // better, use underscores if you want to have multiparted names

(int *)malloc(int); // wrong. Don't typecast the return of malloc(), also it takes a 
                    // size, not a type
malloc(sizeof(int)); // better, you want enought memory for the sizeof 1 int 

したがって、コードのより良いバージョンは次のようになります。

int main() {    
   int *a_ptr = malloc(sizeof(int)); 
   *a_ptr = 5;
   printf("%d", *a_ptr);
   free(a_ptr); // When you're done using memory allocated with malloc, free it
   return 0;
}
于 2012-12-17T19:38:09.500 に答える
1

コードはいくつかの理由で無効であり、コンパイルされません。

  1. a-ptrは無効な変数名です。-名前に使用することはできません。a_ptr代わりに(または何でも)使用してください。

  2. mallocタイプを取りません。割り当てるにはサイズ(バイト単位)が必要です。

  3. "使用した中引用符ではなく、必ず一重引用符を使用してください。

正しいコードは次のようになります。

int main() {
    int *aptr = (int *) malloc(sizeof(int));
    *aptr = 5;
    printf("%d", *aptr);

    return 0;
}

(コンパイラーによっては、からのキャストはオプションの場合がありますmalloc。)int *

于 2012-12-17T19:33:58.980 に答える