数组与指针<一>l

**********************************************************

常量与指针:


const int* p; //p可变,p指向的内容不可变
int const* p; //p可变,p指向的内容不可变
int* const p; //p不可变,p指向的内容可变
const int* const p; //p和p指向的内容都不可变

当const出现在*号左边时指针指向的数据为常量
当const出现在*后右边时指针本身为常量

**********************************************************

数组地址与数组名:


数组名代表数组首元素的地址
数组的地址需要用取地址符&才能得到
数组首元素的地址值与数组的地址值相同
数组首元素的地址与数组的地址是两个不同的概念

**********************************************************

数组名的盲点:


数组名可以看做一个常量指针
数组名“指向”的是内存中数组首元素的起始位置
在表达式中数组名只能作为右值使用
只有在下列场合中数组名不能看做常理指针
* 数组名作为sizeof操作符的参数
* 数组名作为&运算符的参数

**********************************************************

指针和数组的处理方式:


处理指针需要经过一次寻址操作
处理数组无寻址

 1 #include <stdio.h>

 2 /**

 3  ** another.c

 4  ** char* p = "hello world";

 5  **/

 6  

 7 extern char p[];

 8 

 9 int main()

10 {

11     printf("%s\n", p);

12     

13     return 0;

14 }

这个函数打印的应该是乱码,为什么呢?这就是数组和指针的处理方式的不同了。

根据处理数组的方式更改代码:

 1 #include <stdio.h>

 2 /**

 3  ** another.c

 4  ** char* p = "hello world";

 5  **/

 6   

 7 extern char p[];

 8 

 9 int main()

10 {

11     printf("%s\n", (char *)(*((unsigned int*)p)));

12      

13     return 0;

14}


用指针的处理方式:
 1 #include <stdio.h>

 2 /**

 3  ** another.c

 4  ** char* p = "hello world";

 5  **/

 6 

 7 extern char* p;

 8  

 9 int main()

10 {

11     printf("%s\n", p);

12  

13     return 0;

14 }

 

好吧,先写到这,后续。

你可能感兴趣的:(数组)