1.int a[10] a是指向数组首个元素的指针??
答:如果题目完全正确,那么a++,应该成立;但事实上a++是不合法的。
原因就是a做右值处理时是自动转换成首个元素的指针处理,但是当做左值处理时依然是代表整个数组的存储空间(但是可以&a取地址)。
2.指针类型的作用?
int *p=a[0],p+1不是指下一字节,而是指p+sizeof(int),也就是第p+4个字节,或者说是下一个元素的地址。
3.const修饰符与指针?
const int *p;
int const *p;
二者完全相同,均指p所指向的内存单元不可更改;即(*p)++不合法,p++合法。
int * const p;
指向int型的不可改变的指针,即(*p)++合法,p++不合法。
const int * const p
指向一个内存值不可改变的不可改变的指针,即(*p)++和p++都不合法。
4.函数指针?
void finish(const char* arg){} //原函数
void (*f)(const char *)=finish; //f为函数指针
f("hello"); //通过指针调用函数