指針3
#include <stdio.h> /* 2018-05-28 如何通過被調函數修改主調函數普通變數的值 1,實參必須為該普通變數的地址 2,形參必須為指針變數 3,在背調函數中通過 *形參名 = 。。。。。 的方式就可以修改主調函數相關變數的值 */ f(int *i,int *j) { *i = 4; *j = 5; return 0; } int main(void) { int a = 3,b = 5; f(&a,&b); //發送a和b的地址到函數f,然後修改該地址的數值 printf("a = %d,b = %dn",a,b); }#include <stdio.h> /* 指針和數組 指針和一位數組 一維數組名 一維數組名是個指針常亮 它存放的是一維數組第一個元素地址 程式 printf("%#Xn",&a[0]); printf("%#Xn",a); 輸出 0X19FF2C 0X19FF2C 下標和指針的關係 如果p是個指針變數,則 p[i] 永遠等價於*(p+i) 界定一個一維數組需要的幾個參數【如果一個函數需要一個一維數組,則需要接收該數組的那些資訊】 指針變數的運算 指針和二維數組 */ //________________________________________________________________________________________________ /* //一維數組名 int main(void) { int a[5]; //a是數組名,5是數組元素的個數,元素就是變數a[0]--a[4] // int a[3][4]; //3行4列 a[0][0]是第一個元素 a[i][j]是第i+1行j+1列 printf("%#Xn",&a[0]); printf("%#Xn",a); return 0; } */ /* //下標和指針的關係 int main(void) { int a[5] = {1,2,3,4,5}; int i; for (i=0; i<5; ++i) { //printf("%d,%#Xn", a[i],&a[i]); //a[i] == *(a+i) //printf("%d,%#Xn",*(a+i),(a+i)); //printf("%#Xn",a); //a是一個地址 } return 0; } */ //—————————————————————————————————————————————————— /* //界定一個一維數組需要的幾個參數【如果一個函數需要一個一維數組,則需要接收該數組的那些資訊】 //兩個,起始地址和數組長度 void f(int *p,int len) { int i; for(i=0;i<len;i++) { printf("%d,",*(p+i)); } printf("n"); } int main(void) { int a[5] = {1,2,3,4,5}; int b[6] = {-1,-2,-3,-4,-5,-6}; int c[100] = {1,99,22,33}; f(a,5); f(b,6); f(c,100); return 0; } */ //_____________________________________________________________________________________ void f(int *p,int len) { p[3] = 88; printf("%#X,%dn",&p[3],p[3]); //0X19FF38,88 } int main(void) { int a[5] = {1,2,3,4,5}; printf("%#X,%dn",&a[3],a[3]); //0X19FF38,4 f(a,6); printf("%#X,%dn",&a[3],a[3]); //0X19FF38,88 return 0; }