指针与数组

指针与数组

指针引用数组

	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]));
    }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会编程的小江江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值