1
int* sum(int *mypt,int len){
int i;
int mysum = 0; 
for(i=0;i<len;i++)
  mysum += mysum;   
  return &mysum; // I cannot do this since the function frame goes away after the call.
}

int main()
{

  int *pt = (int*) malloc(3*sizeof(int));   
  pt[0] = 0;
  pt[1] = 1;
  pt[2] = 2;

  int *s = sum(pt,3);
  printf("%d\n",*s);    
  return 0;
 }

へのポインターを返したいと思いますmysumint static sum = 0固定なので仕方ありません。int const sum = 0「読み取り専用」のエラーが出て使えません。これに対する解決策はありますか?

4

2 に答える 2

6

なぜポインターを返す必要があるのですか?sum()値で答えを返すことができます。ポインターを返さなければならない場合は、malloc()内部のメモリが必要にsum()なり、合計の呼び出し元がfree()答えを出す必要がありますが、それはあまり効率的ではありません。

int sum(int mypt, len)
{
int i;
int mysum = 0; 
for(i=0;i<len;i++)
  mysum += mysum;   
  return mysum; // return the answer by value.
}

そしてmain()以下のように変更します。

int main()
{

  int *pt = (int*) malloc(3*sizeof(int));   
  pt[0] = 0;
  pt[1] = 1;
  pt[2] = 2;

  int s = sum(pt,3);
  printf("%d\n",s);    
  return 0;
 }
于 2013-11-13T00:56:22.697 に答える
3

はい、malloc整数をヒープメモリに配置してポインタを取得するために使用します。次に、関数からこのポインターを返すことができます。

int* sum(int *mypt, int len) {
    int i;
    int* mysum = malloc(sizeof(int));

    //make sure you dereference (*) when you wish to work with the value.
    *mysum = 0;

    for(i=0; i<len; i++) *mysum += *mysum; 

    return mysum; 
}

さておき、コードの多くが壊れているようです。これは、ポインターを返す方法のみを解決します!

于 2013-11-13T00:57:40.627 に答える