数组名和指针的区别

作者:SHI家的鱼
链接:https://www.zhihu.com/question/41805285/answer/202040382
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1. 己址

数组和指针,都是有自己的地址的。在代码中,你可以用取地址运算符“&”来取得。程序中是:

printf("%x %x ", &pInt, &arr);

2. 己值

数组和指针,都是有自己的数据值的。程序中,数组arr的数据值,是arr[0]的地址;而对于指针pInt,通过

pInt = arr;

之后,pInt的数据值也是arr[0]的地址。

但是,有一点不一样的是,arr的数据值是不可以改变的,是个常量;而指针变量pInt的数据值,是可以改变的,你可以:

pInt = arr;

你也可以:

pInt = arr + 1;

随你!

另外,都可以在数组和指针的己值上,做运算,比如:

arr + 1;

pInt + 1;

3. 他值

数组和指针,在获取他值时,在代码的写法上是一样的。比如对于数组,你想获取第2个元素的值,你可以这样写:

arr[1];*(arr + 1);

对于指针pInt,你也可以这样写:

pInt[1]; *(pInt + 1);

也可以在数组和指针的他值上做运算,比如:

arr[0] + 1; *arr + 1; *(arr + 1) + 1;

pInt[1] + 1; *pInt + 1; *(pInt + 1) + 1;

4. 总结

数组和指针在概念上是不一样的,但是在代码的写法上,有些是一样的。有兴趣的朋友,可以结合我的文章中提出的“两己三他”:己址、己值、他值、他址、他型这5个维度来理解。

原文地址:https://www.cnblogs.com/mini-coconut/p/9240069.html