12. 6.2.2 指针变量的引用 [ 例 6.1] 用指针变量进行输入、输出。 int main( ){ int *p,m; scanf("%d" , &m); /* & :取变量 m 的指针 */ p = &m; /* 指针 p 指向变量 m */ printf("%d ",*p); /* *p 是对指针所指的变量的引 用形式 , 与 m 意义相同 */ printf("%x",p); /* 输出指针变量 p 中的指针,指 针是以整数形式表示的 */ return 0; }
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26. 6.4.1 指针与一维数组 例 int array[10]; int *p; p=&array[0]; // p=array; 或 int *p=&array[0]; 或 int *p=array; 数组名是表示数组首地址的地址常量 array[0] array[1] array[2] array[3] array[9] ... 整型指针 p &array[0] p
65. 小结 定 义 含 义 int i; 定义整型变量 i int *p = &i; p 为指向整型数据 i 的指针变量 int a[n]; 定义含 n 个元素的整型数组 a ,此时 n 为常量 ( 下同 ) int *p[n]; n 个指向整型数据的指针变量组成的指针数组 p int (*p)[n]; p 为指向含 n 个元素的一维整型数组的指针变量 int f(); f 为返回整型数的函数 int *p(); p 为返回指针的函数,该指针指向一个整型数据 int (*p)(); p 为指向函数的指针变量,该函数返回整型数 int **p; p 为指针变量,它指向一个指向整型数据的指针变量
Hinweis der Redaktion
#include <stdio.h> #define M 3 #define N 4 float average(float *p,int n) ; void tprint(float (*pt)[N]); int main( ){ float a[M][N],score[M]; float averscore = 0.0; int i,j; float (*ptr)[N]; /* 指向二维数组 a 的行指针 */ ptr = a; /* 行指针指向二维数组的第一行,即指向二维数组 */ for( i = 0; i < M; i++ ) /* 二维数组的数据输入 */ for( j = 0; j < N; j++ ) scanf( &quot;%f&quot;, &a[i][j] ); for( i = 0; i < M; i++ ){ score[i] = average(a[i],N); averscore += score[i]; } averscore /= M; /* 总成绩均值 */ ptr = a; for( i = 0; i < M; i++ ) if ( score[i] > averscore ) tprint(ptr+i); /* 打印指定序号的同学成绩 */ return 0; } float average(float *p,int n){ /* 计算总平均分数并打印 */ float aver=0,*pend=p+n; for(;p<pend;p++) aver=aver+(*p); aver=aver/n; return aver; } void tprint(float (*pt)[N]){ /* 打印第 k 个学生的 N 门课程成绩 */ int i,j; for(j=0; j<N; j++) printf(&quot;%5.1f&quot;,*(*pt+j)); printf(&quot;\\n&quot;); }
#include <stdio.h> #include <string.h> #define maxStrlen 30 /* 串的最大长度 */ #define maxStrcount 50 /* 数组的最大行数 */ int alpha_first(char *list[], int min_sub, int max_sub); void select_sort_str(char *list[], int n); int main( ){ char string[maxStrcount][maxStrlen]; char *alpha[maxStrlen]; int num,i; char one_char; printf(&quot; 输入串个数 (0 . . %d)\\n> &quot;, maxStrlen); scanf(&quot;%d&quot;, &num); printf(&quot; 每个符号串以 Enter 键结束 \\n&quot;); for (i = 0; i < num; ++i) gets(string[i]); /* 串的分隔符为 ‘ \\n’ */ for (i = 0; i < num; ++i) alpha[i] = string[i]; /* 仅仅复制指针 */ select_sort_str(alpha, num); /* 选择排序 */ printf(&quot;\\n\\n%-30s%5c%-30s\\n\\n&quot;, &quot; 初始顺序 &quot;, ' ', &quot; 字典顺序 &quot;); for (i = 0; i < num; ++i) printf(&quot;%-30s%5c%-30s\\n&quot;, string[i], ' ', alpha[i]); return(0); } int alpha_first(char *list[], int min_sub, int max_sub){ int first, i; first = min_sub; for (i = min_sub + 1; i <= max_sub; ++i) if (strcmp(list[i], list[first]) < 0) first = i; return (first); } void select_sort_str(char *list[],int n){ int fill,index_of_min; char *temp; for (fill = 0; fill < n - 1; ++fill) { index_of_min = alpha_first(list, fill, n - 1); if (index_of_min != fill) { temp = list[index_of_min]; list[index_of_min] = list[fill]; list[fill] = temp; } } }
#include <stdio.h> int max(int ,int ); int min(int ,int ); int add(int ,int ); int process(int x,int y, int (*f)(int,int)); int main( ){ int a,b; printf(&quot;Enter two num to a and b:&quot;);scanf(&quot;%d%d&quot;,&a,&b); /* 调用通用处理函数 */ printf(&quot;max=%d\\n&quot;,process(a,b,max)); printf(&quot;min=%d\\n&quot;,process(a,b,min)); printf(&quot;add=%d\\n&quot;,process(a,b,add)); return 0; } int max(int x,int y){ /* 返回两数之中较大的数 */ return x>y?x:y; } int min(int x,int y){/* 返回两数之中较小的数 */ return x<y?x:y; } int add(int x,int y){ /* 返回两数的和 */ return x+y; } int process(int x,int y,int (*f)(int,int)){/* 函数参数为一个函数指针 */ return (*f)(x,y); }