2

これは現時点で学習ガイドの一部であり、それほど難しくはないことはわかっていますが、何を求めているのか理解できません.

関数を書きます: struct *grump(int i, int j) は、値 i、j をフィールド a、b に保持する「struct grump」へのポインターを返します。

だから与えられた

struct grump
{
    int a;
    int b;
};

私はそれが何を求めているのか混乱しています

4

3 に答える 3

3

次のようなstruct grumpiとを保持するを割り当てるように求められます。j

struct grump* func(int i, int j)
{
    struct grump *g = malloc(sizeof(*g));
    if (g != NULL) {
       g->a = i;
       g->b = j;
    }
    return g;
}

注:関数が返される場合は、使用する前に成功したかどうかg != NULLを確認します。もちろん、ある時点であなたはその記憶を必要とするでしょう、私はあなたの研究ガイドがすぐにそれについて言及すると確信しています。malloc()grumpNULLfree()

于 2012-11-19T07:10:45.170 に答える
1

関数に渡した値を関数に設定する関数を作成する必要がstruct grumpありますが、構造体オブジェクトがどこにあるかによって異なります。

構造体オブジェクトがグローバルであるか、を使用して割り当てている場合は、構造体オブジェクトにアクセスできます。malloc()

を使用してデモを示しましたmalloc()

あなたはこのようにすることができます:

struct grump* foo(int i, int j)
{
struct grump *ptg;
ptg=malloc(sizeof(struct grump));
if(ptg)
{
ptg->a=i;
ptg->b=j;
}
return ptg;
}

int main()
{
struct grump *pg;
pg=foo(5,10);
// Do whatever you want 
free(pg); // Don't forget to free , It's best practice to free malloced object
return 0;
}
于 2012-11-19T07:12:41.133 に答える
1

Cにはコンストラクターと呼ばれる組み込みのものはありませんが、それは本質的にあなたが書いているものです。それを次のレベルに引き上げて、typedefもう少しオブジェクトのような構造体を作成するために使用することをお勧めします。

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    int a, b;
} g;

g *grump(int i, int j) {
  g *t = malloc(sizeof(g));
  t->a = i;
  t->b = j;
  return t;
}

int main(int ac, char **av) {
  g *a;

  a = grump(123, 456);
  printf("%d %d\n", a->a, a->b);
  return 0;
}
于 2012-11-19T07:18:45.777 に答える