搜索引擎主题网站模板,建设网站的申请信用卡,活动宣传推广的形式有哪些,微信分销网站建设费用导语
本次授课的内容如下#xff1a;指针#xff0c;指针和数组
辅助教材为 《C语言程序设计现代方法#xff08;第2版#xff09;》
指针
指针变量
计算机按字节划分地址#xff0c;每个地址访问一个字节
指针变量指向变量的地址#xff0c;指的是变量第一个字节的…导语
本次授课的内容如下指针指针和数组
辅助教材为 《C语言程序设计现代方法第2版》
指针
指针变量
计算机按字节划分地址每个地址访问一个字节
指针变量指向变量的地址指的是变量第一个字节的地址
int *p;
int i,j,a[10],*p,*q;
int *x;
double *y;
char *z;
sizeof(x);相关运算符
取地址符
int x;
int *p;
px;//指针变量存储了地址
scanf(%d,x);
scanf(%d,p);//等价int i,*pi;间接寻址符*
int x,*px;//p是x的别名
x10;
printf(%d\n,*p);
int y*x;
*p3;
printf(%d %d\n,x,y);赋值
浅复制指针指向的是同一个数据
具体讲解书上例子
int i,j,*p,*q;
pi;
qp;
*q*p;作参
可以完成对输入参数的修改
#inlcude stdio.h
#include stdlib.h
void decompose(double x, long *int_part, double *frac_part)//传入的是地址
{*int_part (long) x;*fract_part x - *int_part;
}
int main()
{int i;double d;decompose(3.14159, i, d);printf(%d %f,i,d);
}示例程序
#include stdio.h
#define N 10
void max_min(int a[], int n, int *max, int *min);
int main(void)
{int b[N], i, big, small;printf(Enter %d numbers: , N);for (i 0; i N; i)scanf(%d, b[i]);max_min(b, N, big, small);printf(Largest: %d\n, big);printf(Smallest: %d\n, small);return 0;
}
void max_min(int a[], int n, int *max, int *min)
{int i;*max *min a[0];for (i 1; i n; i) {if (a[i] *max)*max a[i];else if (a[i] *min)*min a[i];}
}作返回
示例程序
int *max(int *a, int *b)
{if (*a *b)return a;elsereturn b;
}
int *p,i,j;
pmax(i,j);
//不能返回局部变量的指针
int*find_middle(int a[], int n) {return a[n/2];
}指针和数组
指针算术运算
int*p,a[10];
for(int i0;i10;i)a[i]i;
pa;//p指向第一个元素
p;//p指向第二个元素
p5;
p--;
p-2;
int *qa;
printf(%d %d,q-p,p-q);pq?p:q;//指针相互比较为同一数组中的位置处理数组
指针可以代替变量i
int a[N], sum, *p;
sum 0;
//paN也可以
for (p a[0]; p a[N-1]; p)sum *p;数组名做指针
数组名是定值不能用来操作
for (p a; p a N; p)sum *p;数组作为函数参数时直接复制整个数组但是如果传入数组名就只会复制数组的首地址
int find_largest(int a[], int n)
{int i, max;max a[0];for (i 0; i n; i)if (a[i] max)max a[i];return max;
}
int find_largest(int* a, int n)
{int i, max;max a[0];for (i 0; i n; i)if (a[i] max)max a[i];return max;
}示例程序
#include stdio.h
#define N 10
int main(void)
{int a[N], *p;printf(Enter %d numbers: , N);for (p a; p a N; p)scanf(%d, p);printf(In reverse order:);for (p a N - 1; p a; p--)printf( %d, *p);printf(\n);return 0;
}指针和多维数组
指针可以使得双循环变单循环
for (row 0; row NUM_ROWS; row)for (col 0; col NUM_COLS; col)a[row][col] 0;for (p a[0][0]; p a[NUM_ROWS-1][NUM_COLS-1]; p)*p 0;如果只是处理一行
for (p a[i]; p a[i] NUM_COLS; p)*p 0;处理一列
for (p a[0]; p a[NUM_ROWS]; p)(*p)[i] 0;数组是数组名永远会被编译器认为是一维的而不是二维是指向a[0]而不是a[0][0]
总结和复习
本次授课讲述第11章和第12章内容关键点指针