<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            C語言

            C語言函數返回值解析

            時間:2025-04-22 17:11:03 C語言 我要投稿
            • 相關推薦

            C語言函數返回值解析

              用C語言編寫不同的函數,函數返回的值是不一樣的。下面是小編為大家帶來的關于C語言函數返回值解析的知識,歡迎閱讀。

              程序一:

              int main()

              {

              int *p;

              int i;

              int*fun(void);

              p=fun();

              for(i=0;i<3;i++)

              {

              printf("%d ",*p);

              p++;

              }

              return 0;

              };

              int* fun(void)

              {

              static int str[]={1,2,3,4,5};

              int*q=str;

              return q;

              }

              //不能正確返回

              雖然str是在動態變量區,而該動態變量是局部的,函數結束時不保留的。

              程序二:

              int main()

              {

              char *p;

              char*fun(void);

              p=fun();

              printf("%s ",p);

              return 0;

              };

              char * fun(void)

              {

              char *str="hello";

              return str;

              }

              //可以正確返回

              但是,字符串"hello"不是變量,而是一個常量,編譯程序在處理這種常量時,通常把它放在了常量區中。而常量區則是始終存在的。

              后一個例子中函數fun的返回值就是一個指向這種常量區的指針。

              函數返回指針,要使主程序可以使用這個指針來訪問有意義的數據,關鍵就是要保證在使用這個指針值的時候,該指針所指向的地方的數據仍然有意義。

              還有,如果指針是指向函數的指針,那么這個指針就是指向程序代碼區的。這也是一種應用的情況。

              另外,如果明白了它的原理,程序員還可以發明出一些其他靈活的使用方法,當然,那都屬于“怪”方法,一般不提倡的。

              程序三:

              int main()

              {

              int a,b;

              int max;

              int fun (int a,int b);

              scanf("%d%d",&a,&b);

              max=fun (a,b);

              printf(" %d ",max);

              return 0;

              };

              //http://www.bianceng.cn

              int fun(int a,int b)

              {

              int max;

              if(a>b)

              max=a;

              else

              max=b;

              return max;

              }

              //可以正確返回

              程序三:

              這個例子中,返回的不是變量max的地址,返回的是它的值。

              return后面的東西,看做一個表達式,返回的是這個表達式的值。

              例如,入口如果a是3,b是5,則此時(執行return語句時)max里面存的是5。而return語句的功能就是把max里面的5取出來,放到“返回值寄存器”中。

              主程序是從“返回值寄存器”得到這個5的(此時max變量已經不存在了)。

              你前面的第二個例子中,同樣,指針變量str在函數結束后已經不存在了。但是在return語句中,把指針變量str里面的值(等于字符串"hello"存放處的地址)送到“返回值寄存器”中了。

              動態變量str不存在了,但常量區中的字符串"hello"還存在。主程序根據返回的地址就可以找到該字符串。

              程序四:

              int main()

              {

              char *p;

              char *fun(void);

              p=fun();

              printf("%x ",p);

              printf("%s ",p);

              return 0;

              }

              char* fun(void)

              {

              // char str[]={'a','b','c','d','e','f','

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院