指针与数组
指针引用数组
int a[3]={1,2,3};
int i;
//数组 关心的是数组的·首地址 两种方式:1.数组名=地址 2.第一个元素的地址
int *p;
p=a;
//p=&a[0];
for(i=0;i<3;i++)
printf("%d ",a[i]);
//printf("%d ",*p++); //通过指针访问数组
//printf("%d ",p[i]);
//printf("%d ",*(a+i));
//printf("%d ",*(p+i)); //通过指针访问数组
//p++;
for(p=a;p<(a+3);p++)
printf("%d ",*p);
for(i=0;i<3;i++)
scanf("%d",&a[i]);
//scanf("%d",a+i);
p=a;
while(p<a+3)
printf("%d",*p++);
用数组名作函数参数
int fun(int a[],int n);
main()
{
int a[3]={70,80,90};
int sum;
printf("in main sizeof=%d\n",sizeof(a));
//sum=fun(a,3);
//printf("sum=%d",sum);
}
int fun(int a[],int n)
{
printf("in main sizeof=%d\n",sizeof(a));
/*int sum=0,i=0;
for(i=0;i<3;i++)
sum+=a[i];
return sum;*/
}
归纳分析:
如果有一个实参数组,要想在函数中改变此数组中的元素的值,实参与形参的对应关系有以下4种。
/*
//形参和实参都用数组名
int main() int f(int x[],int n)
{ {
int a[5]; ...
...; }
f(a,5);
...;
}
//实参用数组名,形参用指针变量
int main() int f(int *p,int n)
{ {
int a[5]; ...
...; }
f(a,5);
...;
}
//实参用指针变量,形参用数组名
//舍近求远
int main() int f(int x[],int n)
{ {
int a[5],*p=a; ...
...; }
f(p,5);
...;
}
//形参和实参都用指针变量
int main() int f(int *p,int n)
{ {
int a[5],*p=a; ...
...; }
f(a,5);
...;
}*/
典例:自定义取最高分函数
int GetMax(int *datas, int size)
{
int max,i;
max=*datas;
for(i=0;i<size;i++)
{
printf("第%d个数据位:%d\n",i+1,*datas);
if(*datas>max)
{
max=*datas;
}
datas++;
}
return max;
}
数组指针
/*
int a[3]={1,2,3};
int *p; //此指针并非是数组指针,仅仅是一个普通的整型数的指针
//刚好指向了数组的首地址a,&a[0]
p=a;
int i;
for(i=0;i<3;i++)
{
printf(" %d ",*p++);
}
*/
int a[3]={1,2,3};
int *p1;
p1=a;
//数组指针 一个指针
int b[2][3]={1,2,3};
int (*p2)[3]; //数组指针 强调类型,数组的个数
//偏移值是整个数组的大小 二维数组
p2=b;
printf("p1数组的地址是:%p\n",a);
printf("p1数组的地址是:%p\n",&a[0]);
printf("p1数组的地址是:%p\n",p1);
printf("p2数组的地址是:%p\n",p2); //0060FEDC
printf("========区别来喽=====\n");
printf("p1++的地址是:%p\n",++p1); //0060FEE8
printf("p2++的地址是:%p\n",++p2); //0060FEE0
典例:
二维整数组与数组指针
int a[2][3]={1,2,3,4,5,6};
int (*p)[3];
int i,j;
p=a; //p=a[0] p=&a[0][0]
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
printf("%d ",p[i][j]);
printf("%d ",*(p[i]+j));
//printf("%d ",*(*(p+i)+j));
printf("\n");
}
二维字符数组与数组指针
char a[][5]={"yuan","liao","liu","wang","li"};
char (*p)[5];
int i;
p=a;
for(i=0;i<5;i++)
{
//printf("%s\n",p+i);
printf("%s\n",p);
p++;
}
指针数组
int a=2;
int b=3;
int c=4;
//int array[3];
//int* p;
//定义指针数组
int* p[3]; //多个指针,叫做指针数组,数组中每一项元素都是一个指针变量
//指针变量是存放地址的变量
p[0]=&a;
p[1]=&b;
p[2]=&c; //把三个毫无关系的整型变量地址存入一个数组中
int i;
for(i=0;i<3;i++)
{
printf(" %d ",*(p[i]));
}
版权声明:本文为weixin_46216674原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。