关于指针的李姐二

本文探讨了C语言中数组与指针的等价性,指出数组名代表首地址,通过指针可以实现数组元素的访问。在函数参数传递时,实参与形参的不同搭配使用方式被详细阐述,包括实参和形参都为数组、实参为数组形参为指针、实参为指针形参为数组以及两者都为指针的情况。示例代码展示了如何在子函数中通过指针交换数组元素,证明了即使不使用return,也能在子函数修改后影响主函数中的数组值。
摘要由CSDN通过智能技术生成

有指针*p与数组a[ ]

p=a就等价于p=a[0],a为数组的数组名即代表第一个地址,且还有p+n=a[n]。其实数组也就是一个小型连续指针,数组中的取值的地址都是连续的,例如a[0]地址为967,那么a[1]的地址就为968,依次类推......

关于主函数与子函数之间利用指针传递数组时候的声明格式

1、实参与形参都为数组

#include<stdio.h>
int here(int [],int n);
int main()
{
	int a[10];
	here(a,10);
}

2、实参为数组,形参为指针

#include<stdio.h>
int here(int *p,int n);
int main()
{
	int a[10];
	here(a,10);
}

3、实参为指针,形参为数组

#include<stdio.h>
int here(int [],int n);
int main()
{
	int a[10];
	int *p;
	*p=a;
	here(p,10);
}

4、实参与形参都为指针

#include<stdio.h>
int here(int *p,int n);
int main()
{
	int a[10];
	int *o;
	o=a;
	here(o,10);
}

又因为数组与指针皆用上了地址,所以在子函数中不需要return仍然可以使在子函数重新赋值后的数组返回主函数(因为对应地址的值已经改变了)。

如以下示例:

将一个数组里的数正向输出,以及反向存储并输出的两种不同方式

#include<stdio.h>
int oo(int x[],int n);
int main()
{
	int i,a[10]={7,5,4,1,55,2,8,97,12,6};
	printf("the origin:\n");
	i=0;
	for(i=0;i<=9;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\nthen:\n");
	oo(a,10);
	for(i=0;i<=9;i++)
	{
		printf("%d ",a[i]);
	}
}
int oo(int x[],int n)
{
	int i,j,m,temp;
	j=0,m=0,temp=0;
	i=(n-1)/2;
		for(j=0;j<=i;j++)
		{
			m=n-j-1;
			temp=x[j];
			x[j]=x[m];
			x[m]=temp;
		}
}
#include<stdio.h>
int oo(int *x,int n);
int main()
{
	int i,a[10]={7,5,4,1,55,2,8,97,12,6};
	printf("the origin:\n");
	i=0;
	for(i=0;i<=9;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\nthen:\n");
	oo(a,10);
	for(i=0;i<=9;i++)
	{
		printf("%d ",a[i]);
	}
}
int oo(int *x,int n)
{
	int i,*j,*m,temp;
	temp=0;
	i=(n-1)/2;
	j=x;
	m=x+n-1;
		for(;j<=x+i;j++,m--)
		{
			temp=*j;
			  *j=*m;
			*m=temp;
		}
}

以上仅为个人想法,不具任何参考价值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值