-3

ポインタを宣言した後、ポインタを設定します。次に、ポインターに含まれている値をその関数に渡すことを期待して、別の関数のパラメーターにポインターを含めます。何らかの理由でこれがうまくいかないのですが、誰かが私を助けてくれますか?

int main()
{
  int *ptr1, *ptr2, count1 = 0, count2 = 0;
  ptr1 = &count1;
  ptr2 = &count2; //sets up the pointees
  records(ptr1, ptr2, filename);

  printf("%d %d\n", count1, count2);//after the loop in the function records, count1 should hold the value 43 and count2 15, however I don't think I passed the values back to main correctly because this print statement prints 0 both count1 and count2
  return 0;
}

FILE* records(int* ptr1, int *ptr2, const char* filename)
{
  FILE* fp;
  int count1 = 0, count2 = 0

  while()//omitted because not really relevant to my question

  printf("%d %d\n", count1, count2)//when I compile the program, count1 is 43 and count2 is 15
  return fp;
}

void initialize(int *ptr1, int *ptr2)
{
  printf("%d %d", count1, count2);//for some reason the values 43 and 15 are not printed? I thought I had included the pointers in the parameters, so the values should pass?
}
4

3 に答える 3

1

関数で、同じ名前の新しいrecords変数を宣言しました。これらは、 のものとは異なります。main の変数を使用する場合は、とをinに置き換える必要があるため、ポインターを使用して in の変数にアクセスします。count1count2maincount1(*ptr1)count2(*ptr2)recordsmain

明確にするために、 を削除してからそれぞれの使用法をおよびに置き換えるrecords必要があります。int count1 = 0, count2 = 0(*ptr1)(*ptr2)

于 2013-02-24T23:25:14.343 に答える
0

initializeおよびrecordsで、非グローバルカウント変数を参照しようとしています。これらの値を出力するには、渡したポインター値を使用することもできます。これを行うには、呼び出しptrで変数(*を使用)を逆参照します。printf

printf("%d %d\n", *ptr1, *ptr2);

カウント変数を変更する予定がない場合は、実際にポインターを渡す必要はなく、カウント変数を直接渡すことができます。

于 2013-02-24T23:26:48.063 に答える
0

提供されたコードはこれを行うだけです:

int main()
{
  int *ptr1, *ptr2, count1 = 0, count2 = 0;
  ptr1 = &count1;
  ptr2 = &count2; //sets up the pointees

  printf("%d %d\n", count1, count2);//
  return 0;
}

少し余分なものが必要だと思います:いくつかの関数を呼び出してみてください-試してみてくださいrecords

于 2013-02-24T23:24:15.940 に答える