赞
踩
1. 常指针与常量的指针
char * const p;
char const * p
const char *p
上述三个有什么区别?
char * const p; //p为只读指针。
char const * p;//p值只读的指针。
const char *p; //和char const *p
---------------------------------------------------
2.定义与声明
声明是普通的声明:它所描述的并非自身,而是描述在其他地方创建的对象。
定义是特殊的声明:它为对象分配内存,即现场创建对象。
---------------------------------------------------
3.左值与右值
I.左值:编译时可知。左值可以分为可修改左值和不可修改左值,数组名就是一个不可修改的左值。即不能给数组名赋值!(注意这里指的是“数组名”) 这是为什么呢?下面有一个现场:
char a[10] = {'a'};
char b[10] = {'b'};
a = b;
编译时出现的错误:
error: incompatible types when assigning to type ‘char[10]’ from type ‘char *’
结论:
当数组名为左值时,它的类型是字符数组;当数组名为右值时,它的数据类型是字符指针。
II.右值:运行时可知。
---------------------------------------------------
4.指针与数组
如果编译器需要一个地址来执行一种操作,对于被定义的数组变量而言的,它地址在编译时可知,所以它就可以直接进行操作;而对于被声明的指针而言,只有在程序运行的时候才知道它所指向的地址的值,然后才能在当前地址上操作。
char array[] = “sdfsdf”; … c = a[i];
数组的下标引用步骤:(1)取编译器符号中的符号array的地址(假设是8888)
(2)array[i]即为取地址8888+i的内容。
char *p; … c = *p;
指针的间接引用步骤:(1)取编译器符号表中符号p的地址(假设是7777)
(2)获取7777位置处的内容(假设是9999)
(3)取9999处地址的内容,即为*p
char *p = “abcdefg”;
char a[] &
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。