ch 103 c includestdio h int funcint int

  • Slides: 26
Download presentation

範例ch 10_3. c 傳址呼叫的應用。 #include<stdio. h> int func(int *, int *); void main( )

範例ch 10_3. c 傳址呼叫的應用。 #include<stdio. h> int func(int *, int *); void main( ) { int a=100, b=200, t; t=func(&a, &b); /* 呼叫函數func( )傳入a與b的位址,將值傳回給t */ printf("a=%d &a=%dn", a, &a); printf("b=%d &b=%dn", b, &b); printf("t=a+b=%d &t=%dn", t, &t); }

int func(int *c, int *d) { int e; e=*c+*d; printf("*c=%dn", *c, c); printf("*d=%dn", *d,

int func(int *c, int *d) { int e; e=*c+*d; printf("*c=%dn", *c, c); printf("*d=%dn", *d, d); printf("e=a+b=%d &e=%dn", e, &e); return(e); } 主程式 副程式 a b c d e 100 200 300

範例ch 10_4. c 傳值呼叫的應用。 #include<stdio. h> int func(int, int); void main( ) { int

範例ch 10_4. c 傳值呼叫的應用。 #include<stdio. h> int func(int, int); void main( ) { int a=100, b=200, t; t=func(a, b); /* 只傳a與b的值給func( ), 並將值傳回給t */ t=a+b; printf("a=%d &a=%dn", a, &a); printf("b=%d &b=%dn", b, &b); printf("t=a+b=%d &t=%dn", t, &t); }

int func(int c, int d) { int e; e=c+d; printf("c=%d &c=%dn", c, &c); printf("d=%d

int func(int c, int d) { int e; e=c+d; printf("c=%d &c=%dn", c, &c); printf("d=%d &d=%dn", d, &d); printf("e=a+b=%d &e=%dnn", e, &e); } 主程式 副程式 a b c d e 100 200 300

範例ch 10_6. c 指標的指標:輸出其內容及位址。 #include<stdio. h> void main( ) { int x=10; int *ptr

範例ch 10_6. c 指標的指標:輸出其內容及位址。 #include<stdio. h> void main( ) { int x=10; int *ptr 1; int **ptr 2; ptr 1=&x; /* 指標ptr 1指向x的位址 */ ptr 2=&ptr 1; /* 雙指標ptr 2指向指標ptr 1的位址 */ printf("x=%d &x=%dn", x, &x); printf("*ptr 1=%dn", *ptr 1, ptr 1); printf("**ptr 2=%dn", **ptr 2, *ptr 2); printf("ptr 2=%p &ptr 1=%pn", ptr 2, &ptr 1); }

範例ch 10_7. c陣列與指標─陣列事實 上也是指標的一種應用。 #include<stdio. h> void main( ) { int i=0, array[6]; for(i=0;

範例ch 10_7. c陣列與指標─陣列事實 上也是指標的一種應用。 #include<stdio. h> void main( ) { int i=0, array[6]; for(i=0; i<6; i++) scanf(“%d”, &array[i]); for(i=0; i<6; i++) printf(“array[%d]=[%d], *(array+%d)=%dn”, i, array[i], i, *(array+i)); }

Ø 解說: 此程式是把陣列名稱當作指標來看,並印出其儲存之數 值,這兩者是相同的。程式中&array[i],也可改為(array+i) ,結果仍是相同的。 Array+0 Array+1 Array+2 Array+3 Array+4 Array+5 array[0] array[1] array[2]

Ø 解說: 此程式是把陣列名稱當作指標來看,並印出其儲存之數 值,這兩者是相同的。程式中&array[i],也可改為(array+i) ,結果仍是相同的。 Array+0 Array+1 Array+2 Array+3 Array+4 Array+5 array[0] array[1] array[2] array[3] array[4] array[5] array+i=&array[i] *(array+i)=array[i] *array *(array+1) *(array+2) *(array+3) *(array+4) *(array+5) 取陣列元素的位址 取陣列元素的內容

指標如何表示二維陣列: 宣告二維陣列array[2][3]:二列三行 array[0][0] array[0][1] array[0][2] array[1][0] array[1][1] array[1][2] Ø 記憶體實際的位址:ptr = array | array[0]

指標如何表示二維陣列: 宣告二維陣列array[2][3]:二列三行 array[0][0] array[0][1] array[0][2] array[1][0] array[1][1] array[1][2] Ø 記憶體實際的位址:ptr = array | array[0] | array[1] | array[0][0] array[0][1] array[0][2] array[1][0] array[1][1] array[1][2] *ptr *(ptr+1) *(ptr+2) *(ptr+3) *(ptr+4) *(ptr+5)

範例ch 10_9. c 指標與二維陣列 #include<stdio. h> void main( ) { ptr int i, *ptr;

範例ch 10_9. c 指標與二維陣列 #include<stdio. h> void main( ) { ptr int i, *ptr; int array[2][3]={{1, 2, 3}, {4, 5, 6}}; array[0] 1 ptr=&array[0][0]; array[1] 4 for(i=0; i<6; i++) printf(“*(ptr+%d)=%dn”, i, *(ptr+i)); } 2 5 3 6

範例ch 10_12. c利用指標陣列儲存一個 星期的名稱字串SUNDAY~SATURDAY #include<stdio. h> void main( ) { int i; char *str[7]={

範例ch 10_12. c利用指標陣列儲存一個 星期的名稱字串SUNDAY~SATURDAY #include<stdio. h> void main( ) { int i; char *str[7]={ “SUNDAY”, ”MONDAY”, ”TUESDAY”, ”WEDNESDAY” , ”THURSDAY”, ”FRIDAY”, ”SATURDAY”}; for(i=0; i<7; i++) printf(“&str[%d]=%p, str[%d]=%sn”, i, str[i]); }