2016-04-25 14 views
-1

私は初心者であるので、私はCで混乱しています。私は1.1が私に最大値を与えていることを知っていて、1.2は私に最大値の可変アドレス[Picture]を与えています。 私の質問は、メインでfindmax関数をどのように呼び出すのですか?関数定義の関数と*関数の違いは何ですか?

int * findMax(int *a,int SIZE){ 

     int i,max=*a,address,add; 

     for(i=0;i<SIZE;i++){ 

      if(max<*(a+i)){ 

       max=*(a+i); 

         } 
      } 
     //printf("maxium value is %d at index %x",max,&max); 
     return &max; 
     } 
+0

可能な複製(http://stackoverflow.com/questions/840501/how-do-function-pointers- [C作業ではどのように関数ポインタ?] in-c-work) –

+0

@DiligentKeyPresser:そうは思わない。コードには、関数ポインタではなく、ポインタを返す関数があります。 –

+0

関数*は、ローカル変数*へのポインタを返します。非常に良い考えではありません。 – tofro

答えて

5

*が関数ポインタではありません、それは関数の戻り値の型です。 findMax関数は整数へのポインタを返します。だから、あなただけのメインで、他の関数のようにそれを呼び出します。

int a[] = {1,2,3,4}; 
int *p = findMax(a, 4); 

別の問題がありますが、ローカル変数へのポインタを返し、あなたのfindMax機能では、変数のストレージはとき利用できなくなります関数は戻ります。使用すると、未定義の動作が発生します。したがって、ポインタを返す必要がある場合は、maxを整数として返すことができます。ポインタを割り当てたり、有効なポインタを返したりする必要があります。例えば

:の

int* findMax(int *a,int SIZE){ 
    int i; 
    int *max = a; 
    for(i=0;i<SIZE;i++){ 
     if(*max<*(a+i)){ 
      max=a+i; 
     } 
    } 
    return max; 
} 
+0

私を助けてくれてありがとう。 –

+0

@ mirza-nehal-Baig、答えを受け入れることを忘れないでください。 – user3078414

1
#include<stdio.h> 

int Max; 
int* FindMax(int *a,int size) 
{ 
    int i; 
    Max=a[0]; 
    for(i=0;i<size;i++) 
    { 
     if(Max<=a[i]) 
      Max=a[i]; 
    } 
    return &Max; 
} 

int main() 
{ 
    int a[10]={10,19,9,127,45,189,47,222,90,158}; 
    printf("Address of Max Element:%p \n",FindMax(a,10)); 
    printf("Max of Elements:%d \n",Max); 
    getchar(); 
    return 0; 
} 
+0

メイン内ではなくファイルスコープで関数を宣言する方が良いです –

+0

これはより良いですか? @MM – Yugesh

+0

これより良いが、 'Max'がグローバルである必要はありません。 'FindMax(int *、int size、int max)'(関数内で必要に応じて名前を変更する)のように、 'main'に宣言して' FindMax'にパラメータとして渡してください。また、標準のコーディングスタイルCでは 'caMelCase'変数をすべての小文字*を優先して回避しています(例:[** NASA - C Style Guide、1994 **](http://homepages.inf.ed.ac.uk/dts/pm /Papers/nasa-c-style.pdf) –

関連する問題