最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言之把數(shù)組名作函數(shù)參數(shù)的四種情況說明

 更新時(shí)間:2022年07月13日 14:32:35   作者:慢生活的人。  
這篇文章主要介紹了C語言之把數(shù)組名作函數(shù)參數(shù)的四種情況說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

把數(shù)組名作函數(shù)參數(shù)的四種情況

如果想要通過函數(shù)調(diào)用得到n個(gè)要改變的值

思路

①在主函數(shù)中設(shè)n個(gè)變量,用n個(gè)指針變量指向它們

②設(shè)計(jì)一個(gè)函數(shù),有n個(gè)指針形參,在這個(gè)函數(shù)中改變這n個(gè)形參所指向的值

③在主函數(shù)中調(diào)用這個(gè)函數(shù),在調(diào)用時(shí)將n個(gè)指針變量做為實(shí)參,將它們的地址傳給該函數(shù)的形參

④在執(zhí)行該函數(shù)的過程中,通過形參指針變量,改變它們所指向的n個(gè)變量的值

⑤主調(diào)函數(shù)中就可以使用這些改變了值的變量

同樣,數(shù)組是一些連續(xù)變量的容器,當(dāng)然也可以通過函數(shù)也改變數(shù)組中的值。

如果有一個(gè)實(shí)參數(shù)組,想要在函數(shù)中改變此數(shù)組中的元素的值

實(shí)參與形參的對(duì)應(yīng)關(guān)系有以下四種情況

1.實(shí)參和形參都是數(shù)組名

2.實(shí)參是數(shù)組名,形參是指針變量

3.實(shí)參是指針變量,形參是數(shù)組名

4.實(shí)參和形參都是指針變量

我們來看代碼

1.實(shí)參和形參都是數(shù)組名

# include <stdio.h>
//實(shí)參用屬組名,形參也用數(shù)組名
int main(void)
{
?? ?void inv(int arr[], int n);
?? ?int array[10], i;
?? ?printf("Please enter ten integer numbers: \n");
?? ?for (i=0; i<10; i++)
?? ??? ?scanf("%d", &array[i]);
?? ?printf("original array:\n");
?? ?for (i=0; i<10; i++)
?? ??? ?printf("%2d", array[i]);
?? ?printf("\n");
?? ?inv(array, 10);
?? ?printf("reversed array:\n");
?? ?for (i=0; i<10; i++)
?? ??? ?printf("%2d", array[i]);
?? ?printf("\n");
?? ?return 0;
}
void inv(int arr[], int n)
{
?? ?int temp, m, i;
?? ?m = (n-1)/2
?? ??? ?;
?? ?for (i=0; i<=m; i++)
?? ?{
?? ??? ?temp = arr[i];
?? ??? ?arr[i] = arr[n-1-i];
?? ??? ?arr[n-1-i] = temp;
?? ?}
?? ?
}

2.實(shí)參是數(shù)組名,形參是指針變量

# include<stdio.h>
//實(shí)參用數(shù)組名,形參使用指針變量
int main(void)
{
?? ?void inv(int * p, int n);
?? ?void inv2(int * p, int n);
?? ?int array[10], i;
?? ?printf("Please enter ten integer numbers: \n");
?? ?for (i=0; i<10; i++)
?? ??? ?scanf("%d", &array[i]);
?? ?printf("original array:\n");
?? ?for (i=0; i<10; i++)
?? ??? ?printf("%2d", array[i]);
?? ?printf("\n");
?? ?inv2(array, 10);
?? ?printf("reversed array:\n");
?? ?for (i=0; i<10; i++)
?? ??? ?printf("%2d", array[i]);
?? ?printf("\n");
?? ?return 0;
}
void inv(int * p, int n)
{
?? ?int temp, i, m;?? ??? ??? ??? ?//定義普通變量
?? ?m = (n-1)/2;
?? ?for (i=0; i<=m; i++)
?? ?{
?? ??? ?temp = *(p+i);?? ??? ??? ?//使用指針指向的值進(jìn)行交換
?? ??? ?*(p+i) = *(p+n-1-i);?? ?
?? ??? ?*(p+n-1-i) = temp;
?? ?}
}
void inv2(int * p, int n)
{
?? ?int * i, temp, * j, m;?? ??? ??? ?//定義指針變量
?? ?j = p+n-1;
?? ?m = (n-1)/2;
?? ?for (i=p; i<p+m; i++, j--)
?? ?{
?? ??? ?temp = *i;?? ??? ??? ??? ??? ?
?? ??? ?*i = *j;
?? ??? ?*j = temp;
?? ?}
}

4.實(shí)參和形參都是指針變量

# include<stdio.h>
//使用指針變量作實(shí)參,指針變量作形參
int main(void)
{
?? ?void inv3(int * p, int n);
?? ?void inv4(int * p, int n);
?? ?int array[10], i, * p;
?? ?p = array;
?? ?printf("Please enter ten integer numbers: \n");
?? ?for (i=0; i<10; i++)
?? ??? ?scanf("%d", &array[i]);
?? ?printf("original array:\n");
?? ?for (i=0; i<10; i++)
?? ??? ?printf("%2d", array[i]);
?? ?printf("\n");
?? ?inv4(p, 10);
?? ?printf("reversed array:\n");
?? ?for (i=0; i<10; i++)
?? ??? ?printf("%2d", array[i]);
?? ?printf("\n");
?? ?return 0;
}
void inv3(int * p, int n)
{
?? ?int i, temp, m;
?? ?m = (n-1)/2;
?? ?for (i=0; i<=m; i++)
?? ?{
?? ??? ?temp = *(p+i);
?? ??? ?*(p+i) = *(p+n-1-i);
?? ??? ?*(p+n-1-i) = temp;
?? ?}
}
void inv4(int * p, int n)
{
?? ?int * i, * j, temp, m;
?? ?m = (n-1)/2;
?? ?j = p+n-1;
?? ?for (i=p; i<=p+m; i++, j--)
?? ?{
?? ??? ?temp = *i;
?? ??? ?*i = *j;
?? ??? ?*j = temp;
?? ??? ?
?? ?}
}

其中在inv函數(shù)中,無論是使用指針變量還是使用數(shù)組名,改變的只是實(shí)參指針變量所指向的變量的值。

牢記一句話(我認(rèn)為是學(xué)習(xí)指針的重中之重,以不變應(yīng)萬變):

C語言中實(shí)參變量和形參變量之間的數(shù)據(jù)傳遞是單向的“值傳遞”方式。用指針變量作函數(shù)參數(shù)同樣要遵循這一規(guī)則。不可能通過執(zhí)行調(diào)用函數(shù)來改變實(shí)參指針變量的值,但是可以改變實(shí)參指針變量所指向變量的值。 

一般函數(shù)作參數(shù)和數(shù)組名作參數(shù)區(qū)別

此次區(qū)別的分析來源于實(shí)踐之后…

代碼示例:

一般函數(shù)作參數(shù)

#include<stdio.h>
void main()
{
float a,b;
float add(float a,float b);
scanf("%f%f",&a,&b);
add(a,b);
printf("輸出主函數(shù)的a=%f\n",a);
}
float add(float a,float b)
{
a=a+b;
printf("輸出子函數(shù)的a=%f\n",a);
return a;
}

運(yùn)行結(jié)果:

數(shù)組名作函數(shù)參數(shù)

#include<stdio.h>
void main()
{
float a[1],b;
float add(float a[],float b);
scanf("%f%f",&a[0],&b);
add(a,b);
printf("輸出主函數(shù)的a=%f\n",a[0]);
}
float add(float a[],float b)
{
a[0]=a[0]+b;
printf("輸出子函數(shù)的a=%f\n",a[0]);
}

運(yùn)行結(jié)果:

原理解釋:

由代碼一輸出結(jié)果可知,一般函數(shù)作參數(shù)(在子函數(shù)中),其形參數(shù)據(jù)不能夠改變實(shí)參數(shù)據(jù)的。所以輸出主函數(shù)的a=3.000000

由代碼二輸出結(jié)果可知,數(shù)組名作函數(shù)參數(shù)(尤其在子函數(shù)中)可通過形參(指針變量)是可以改變實(shí)參數(shù)據(jù)的。這突顯了數(shù)組的普適性,功能性強(qiáng)優(yōu)于其他一般函數(shù)。(個(gè)人拙見)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++實(shí)現(xiàn)帶頭雙向循環(huán)鏈表的示例詳解

    C++實(shí)現(xiàn)帶頭雙向循環(huán)鏈表的示例詳解

    這篇文章主要介紹了如何利用C++實(shí)現(xiàn)帶頭雙向循環(huán)鏈表,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-12-12
  • Qt實(shí)現(xiàn)手動(dòng)切換多種布局的完美方案

    Qt實(shí)現(xiàn)手動(dòng)切換多種布局的完美方案

    通過點(diǎn)擊程序界面上不同的布局按鈕,使主工作區(qū)呈現(xiàn)出不同的頁面布局,多個(gè)布局之間可以通過點(diǎn)擊不同布局按鈕切換,支持的最多的窗口為9個(gè),不同布局下窗口數(shù)隨之變化,這篇文章主要介紹了Qt實(shí)現(xiàn)手動(dòng)切換多種布局的完美方案,需要的朋友可以參考下
    2024-07-07
  • c++快速排序詳解

    c++快速排序詳解

    快速排序總體思想:先找到一個(gè)樞軸,讓他作為分水嶺,通過一趟排序?qū)⒋判虻挠涗浄指畛蓛刹糠?前面一部分都比樞軸小,后面一部分樞軸大,然后又分別對(duì)這兩部分記錄繼續(xù)進(jìn)行遞歸的排序,達(dá)到整個(gè)序列有序的目的
    2017-05-05
  • C語言實(shí)現(xiàn)空戰(zhàn)游戲

    C語言實(shí)現(xiàn)空戰(zhàn)游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)空戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++將保存char、int 和double到txt文件中

    C++將保存char、int 和double到txt文件中

    這篇文章主要介紹了C++如何將保存char、int 和double到txt文件中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • win32使用openfilename瀏覽文件窗口示例

    win32使用openfilename瀏覽文件窗口示例

    這篇文章主要介紹了使用win32 API打開瀏覽文件窗口,使用OPENFILENAME結(jié)構(gòu)體來實(shí)現(xiàn)這個(gè)功能,需要的朋友可以參考下
    2014-02-02
  • OpenCV視頻流C++多線程處理方法詳細(xì)分析

    OpenCV視頻流C++多線程處理方法詳細(xì)分析

    為OpenCV是搞計(jì)算機(jī)視覺必須要掌握的基礎(chǔ),這篇文章主要給大家介紹了關(guān)于OpenCV視頻流多線程處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • C語言中使用快速排序算法對(duì)元素排序的實(shí)例詳解

    C語言中使用快速排序算法對(duì)元素排序的實(shí)例詳解

    這篇文章主要介紹了C語言中使用快速排序算法對(duì)元素排序的實(shí)例詳解,文中細(xì)分了幾個(gè)情況來舉例,在注釋里有說明,需要的朋友可以參考下
    2016-04-04
  • 詳解C++ 動(dòng)態(tài)內(nèi)存分配與命名空間

    詳解C++ 動(dòng)態(tài)內(nèi)存分配與命名空間

    這篇文章主要介紹了詳解C++ 動(dòng)態(tài)內(nèi)存分配與命名空間,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • C++編程中的函數(shù)指針初步解析

    C++編程中的函數(shù)指針初步解析

    這篇文章主要介紹了C++編程中的函數(shù)指針初步解析,函數(shù)指針在C語言和C++學(xué)習(xí)中都是非常重要的知識(shí),需要的朋友可以參考下
    2016-04-04

最新評(píng)論

如东县| 章丘市| 武乡县| 鹿泉市| 大理市| 米脂县| 天气| 盱眙县| 铜陵市| 临泽县| 中江县| 华阴市| 招远市| 红河县| 蓝山县| 潍坊市| 宁远县| 弥勒县| 平江县| 岳阳市| 河间市| 安吉县| 鱼台县| 雅江县| 桦南县| 鄂尔多斯市| 福贡县| 宾川县| 曲麻莱县| 平昌县| 灵璧县| 临城县| 衡山县| 布拖县| 静海县| 天门市| 邢台县| 缙云县| 全南县| 安多县| 莫力|