C语言数组的地址

Python018

C语言数组的地址,第1张

其实你这个疑问是概念上的混淆,或者说对指针了解上上的欠缺

首先讲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维数组得到进一步理解,讲的有点乱,不知道你能不能理解

C语言数组名,就是数组的首地址.

数组的首地址,就是首元素地址.

所以

C语言数组地址指向首元素是正确的.

int

a[N]

a的值

就是&a[0]

数组名就是数组的首地址啊。

直接使用swaps(a,b)就可以

不过其实你子函数就写错了,根本就不是你所说的用数组地址做形参。而是要求用一个 二维数组或者是指针数组作为实参。

正确的代码如下

#include<string.h>

#include<stdio.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[])则意义就不对了,而是要求一个指针数组