重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
数组名就是数组的首地址啊。
成都创新互联服务项目包括张掖网站建设、张掖网站制作、张掖网页制作以及张掖网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,张掖网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到张掖省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
直接使用swaps(a,b)就可以
不过其实你子函数就写错了,根本就不是你所说的用数组地址做形参。而是要求用一个 二维数组或者是指针数组作为实参。
正确的代码如下
#includestring.h
#includestdio.h
char d[100];
void swaps(char *p,char *q)
{
if(strcmp(p,q)0)
{
strcpy(d,p);
strcpy(p,q);
strcpy(q,d);
}
}
int main()
{
char a[]="",b[]="",c[]="";
printf("请输入三个字符串,每输入一个字符串按回车确认\n");
gets(a);
gets(b);
gets(c);
swaps(a,b);
return 0;
}
void swaps(char *p,char *q)就是要求传一个地址(指针),而如果你使用
void swaps(char *p[],char *q[])则意义就不对了,而是要求一个指针数组
其实你这个疑问是概念上的混淆,或者说对指针了解上上的欠缺
首先讲int a[3] = {2,3,4};
这里的a是这个数组的首地址,比如定义如:int *p = a;这时如果你进行如下操作:
p++;
printf("%d\n",*p);
结果会是输出2,也就是说p+1相当于数组索引加1,但是像你所问的为什么a和a是相同的 ,首先要知道他们分别代表什么意思,a:像上面所说的是数组的首地址,做自加运算会根据数组类型来计算偏移量,那么a是什么东西呢,实际上它也是一个指针,是指向一个具有3个元素的数组的指针,如何理解,看以下定义:
如果你定义int *q = a;这时编译器肯定报错,绘制出数据类型不一致,那么你这样样定义就没有问题:int (*q)[3] = a;这时如果你再对q进行++操作,那么加的就不同了,如相面的p++操作后p的值会加4,而这里q++操作后的值会加12,也就是跳过3个数组元素,然而,确实这两个指针的初始值是一样的,只是类型不一样而已,这对二维数组的访问时很方便的,这个你可以参照2维数组得到进一步理解,讲的有点乱,不知道你能不能理解
数组地址:比如说uint a[10]
那么他的地址可以表示为:a,a[0]两种表示方式,但他们+1时的直是不同的