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

 

好吧,先写到这,后续。

转载于:https://www.cnblogs.com/Daniel-G/archive/2012/11/27/2790861.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值