//说出下列代码含义,有什么区别
const char *p;
char const*p;
char*const p;
我们都知道const修饰变量,这个变量就不能修改!那const修饰指针变量呢?
const修饰指针变量有两种情况
1:const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来修改
。但是指针变量本身的内容可变。
2:const如果放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。
int main()
{
int n = 10;
int m = 19;
int *p = &n;
*p = 20;//通过指针修改指针指向的内容
p = &m;//改变指针变量本身
}
//所以
const char *p
char const *p
char * const p
//第一个和第二个const都放在*的左边,所以不能通过*p来改变,可以通过&p改变指针变量本身的内容
//第三个const在*右边,所以能通过*p来改变,不可以通过&p改变指针变量本身的内容
//看下面代码,32位机下计算各个值(这些问题答错,面试基本不会通过,说明基本功差)
struct A {
int i;
char j;
};
A a;
A* pa = &a;
sizeof(a) = 8
sizeof(pa) = 4
//a是结构体的大小,存在内存偏移
//pa是指针变量,在32位机下4个字节,64位下8个字节
int arr[8];
int* parr = arr;
sizeof(arr) = 32 //数组的大小
sizeof(arr[0]) = 4 //第一个的大小
sizeof(parr) = 4 //指针变量的大小
char sz[] = "helloworld";
char* psz = sz;
sizeof("helloworld") = 11//有\0
sizeof(sz) = 11//有\0
sizeof(psz) = 4//指针变量的大小