数组与指针的转换,特殊的字符数组
2010-05-22 22:35
337 查看
在表达式中使用数组名,改名字会自动转化指向数组第一个元素的指针。
如:int iarr1[10];
int iarr2[10];
int *pa=iarr;//pa指向数组的第一个元素
但如下错误赋值代码有时候可能会让人误解:
iarr2=iarr1;//error:
既然在表达式里数组名字会自动转换为指向数组第一个元素的指针,那为什么这些代码是错误的呢?
事实上,数组名是个const指针,即其值是不可修改的,等同于 int *const iarr2;毕竟,如果这样的代码正确话,就意味着数组可以直接复制。
字面值是没有地址的,所以不能把一个字面值常量赋给一个指针
int *pi=&12;//error:字面值不是对象,不占用内存空间,没有地址
但是我想这里有个例外就是字符串字面值
const char *pc1="a char pointer";//ok:字符串字面值是const char类型的数组,所以应该用const char*类型的指针
学C都知道,字符串实际上是字符数组 char cArra[]="a char pointer";//ok:注意:此字符数组不是const char类型
问题出现:我们怎么知道什么时候字符串字面值,什么时候是普通的字符数组呢?
答案是:依据实际的程序上下文环境。
如:int iarr1[10];
int iarr2[10];
int *pa=iarr;//pa指向数组的第一个元素
但如下错误赋值代码有时候可能会让人误解:
iarr2=iarr1;//error:
既然在表达式里数组名字会自动转换为指向数组第一个元素的指针,那为什么这些代码是错误的呢?
事实上,数组名是个const指针,即其值是不可修改的,等同于 int *const iarr2;毕竟,如果这样的代码正确话,就意味着数组可以直接复制。
字面值是没有地址的,所以不能把一个字面值常量赋给一个指针
int *pi=&12;//error:字面值不是对象,不占用内存空间,没有地址
但是我想这里有个例外就是字符串字面值
const char *pc1="a char pointer";//ok:字符串字面值是const char类型的数组,所以应该用const char*类型的指针
学C都知道,字符串实际上是字符数组 char cArra[]="a char pointer";//ok:注意:此字符数组不是const char类型
问题出现:我们怎么知道什么时候字符串字面值,什么时候是普通的字符数组呢?
答案是:依据实际的程序上下文环境。
相关文章推荐
- 数组与指针的转换,特殊的字符数组
- php对数组或字符串中的特殊字符进行转换
- 关于C中字符数组,字符指针以及C++中string类型的两两转换及排序
- VS2008中CString对象与char型数组(或字符指针)间的转换
- JAVA将 带有空格或特殊字符的字符串转换成int数组的方法
- c++中的字符数组与字符指针
- c语言的字符数组和字符指针
- 第十六周 项目二:用指针玩字符串(2.2.1:去除字符串str的特定字符(用数组名作形参))
- android转换字符串中特殊的HTML标签字符
- byte数组转换成16进制字符串和字符数组的方法
- 字符指针 和 字符数组的区别
- 字符串截取以及字符数组和字符指针的区别
- 字符数组与字符串转换
- 关于C语言中的字符指针和字符数组
- 内存的堆分配和栈分配 & 字符数组,字符指针,Sizeof总结
- 关于对 (char *)字符指针强制转换类型的一些理解
- 用string类型的vector对象创建一个字符指针数组
- C++ 字符串,字符数组,数字之间转换
- 字符数组,字符指针,字符串常量以及其sizeof的一些总结
- 通过指针遍历获得字符数组的长度