<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
如果想要通過函數呼叫得到n個要改變的值
①在主函數中設n個變數,用n個指標變數指向它們
②設計一個函數,有n個指標形參,在這個函數中改變這n個形參所指向的值
③在主函數中呼叫這個函數,在呼叫時將n個指標變數做為實參,將它們的地址傳給該函數的形參
④在執行該函數的過程中,通過形參指標變數,改變它們所指向的n個變數的值
⑤主調函數中就可以使用這些改變了值的變數
同樣,陣列是一些連續變數的容器,當然也可以通過函數也改變陣列中的值。
如果有一個實引陣列,想要在函數中改變此陣列中的元素的值
1.實參和形參都是陣列名
2.實參是陣列名,形參是指標變數
3.實參是指標變數,形參是陣列名
4.實參和形參都是指標變數
1.實參和形參都是陣列名
# include <stdio.h> //實參用屬組名,形參也用陣列名 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.實參是陣列名,形參是指標變數
# include<stdio.h> //實參用陣列名,形參使用指標變數 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); //使用指標指向的值進行交換 *(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.實參和形參都是指標變數
# include<stdio.h> //使用指標變數作實參,指標變數作形參 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函數中,無論是使用指標變數還是使用陣列名,改變的只是實參指標變數所指向的變數的值。
牢記一句話(我認為是學習指標的重中之重,以不變應萬變):
C語言中實參變數和形參變數之間的資料傳遞是單向的“值傳遞”方式。用指標變數作函數引數同樣要遵循這一規則。不可能通過執行呼叫函數來改變實參指標變數的值,但是可以改變實參指標變數所指向變數的值。
此次區別的分析來源於實踐之後…
程式碼範例:
#include<stdio.h> void main() { float a,b; float add(float a,float b); scanf("%f%f",&a,&b); add(a,b); printf("輸出主函數的a=%fn",a); } float add(float a,float b) { a=a+b; printf("輸出子函數的a=%fn",a); return a; }
執行結果:
#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("輸出主函數的a=%fn",a[0]); } float add(float a[],float b) { a[0]=a[0]+b; printf("輸出子函數的a=%fn",a[0]); }
執行結果:
原理解釋:
由程式碼一輸出結果可知,一般函數作引數(在子函數中),其形引資料不能夠改變實引資料的。所以輸出主函數的a=3.000000
由程式碼二輸出結果可知,陣列名作函數引數(尤其在子函數中)可通過形參(指標變數)是可以改變實引資料的。這突顯了陣列的普適性,功能性強優於其他一般函數。(個人拙見)
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45