什么是指针
int *p
p指针名;
*间接运算符
指针的类型
int *p :去掉指针的名字int *(指针本身具有的类型)
指针所指向的类型
int *p :去掉*和名字
指向一维数组的指针:int (*p)[5]
int (*p)[5] 按优先顺序读,先*,指针里的内容指向数组
做形参:接受二维数组首地址,可以按行访问二维数组;
指针数组:int *p[5]
int *p[5] 按优先顺序读,先[],数组里的内容是指针
指针的运算
puts();输出字符串函数
int *p; p++;
p是指针,指向首地址,每加一次,就是内存地址移动sizeof(int)
指针的值
指针所指向的内存区
指针表达式
一个表达式的结果是一个指针
指向多维数组的指针
int (*p)[m] :可以用来接收二维数组的首地址,m为列数;
约束这个指针的两个条件:1、它所指向数组的类型
2、访问二维数组中每行的元素个数(列数)
int a[]={10,20,30};
int (*p)[m] = &a;
int *p[m] :指针数组的说明符
int a=10,b=20,c=30;
int *p[3]={&a,&b,&c};
//多维数组中字符串排序 ss[N][M]={"create","modify","sort","skip","delete"};
void fun(char (*ss)[M]){//指针里的内容是数组构成的--第一个字符串首地址
char *ps[N],*tp; //数组里的内容是指针构成的---每一个字符串的首地址
int i,j,k;
for(i=0;i<N;i++) ps[i]=ss[i];
for(i=0;i<N-1;i++){//每一个字符串和第一个字符型进行相互比较,找出最大的字符串,交换位置
k=i;
for(j=i+1;j<N;j++)
if(strlen(ps[k])<strlen(ps[j])) k=j;
tp = ps[i]; ps[i]=ps[k];ps[k]=tp;
}
printf("\nThe string after sorting by length:\n\n");
for(i=0;i<N;i++) puts(ps[i]);
}
指向函数的指针
int f();//f函数名就是函数的首地址
int (*p)();//指向函数的指针
p =f;
结构体
struct students{
int a;
}stu;
1、结构体变量的成员:
stu.a;
2、结构体指针:
stu *p;
p->a;