数组与指针<一>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 }

 

好吧,先写到这,后续。

posted on 2012-11-27 15:33  Daniel.G  阅读(949)  评论(0编辑  收藏  举报