一些可能没啥用的笔记~
1、(二维数组)元素指针与行指针的区别
-
元素指针
int s[3][4]; int *p1; p1=&s[0][0];
此时,p1+1 = &s[0][1].即p1每次移动4个字节。
-
行指针
int s[3][4]; int (*p)[4]; p2=s;
此时,p2+1=&s[1][0].即p2每次移动4*4=16个字节。
2、指针数组与(二维数组)行指针的区别
-
行指针
int (*p)[3];//行指针,只有一个指针变量
-
指针数组
类型相同的指针构成的数组
int *p[3];//指针数组,有三个指针变量
指针数组常用于处理字符串。
例如:对城市名按照升序排序
图示如下:
#include<stdio.h>
#include<string.h>
void sort(char *city[], int n)
{
char *temp;
int i,j,min;
for(i=0; i<n-1; i++) //选择排序
{
min=i;
for(j=i+1; j<n; j++)
if(strcmp(city[min],city[j])>0) min=j;
if(min!=i)
{
temp=city[i]; city[i]=city[min]; city[min]=temp;
}
}
}
void main()
{
char *city[4]={"nanjing","beijing","hangzhou","xiamen"};//定义指针数组并初始化
sort(city, 4);
for(int i=0; i<4; i++)
puts(city[i]);
}
3、指向指针的指针
上图中q即为指向指针的指针。
以上面城市排序为例,其结果输出也可以借助指针的指针完成:
char **q;
for(int i=0; i<n; i++)
{
q=city+i; //q指向city[i]
printf("%s\n",*q);
}
4、返回指针的函数
例子:函数返回数组元素最大值的地址:
int *max(int a[], int len)
{
int *p,i;
p=a;
for(i=0; i<len; i++)
if(*p<*(a+i)) p=a+i;
return m;
}
5、指向函数的指针
int max(int a, b)
{return (a>b)?a:b}
int (*p)(int, int); //定义指向函数的指针变量p
int x, y, z;
scanf("%d%d", &x, &y);
p=max; //使p指向max函数
z=(*p)(x, y); //通过指针变量p调用max函数
printf("Max number = %d\n", z);