回顾初阶指针内容:
1、字符指针指针的概念:
- 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。
- 指针的大小是固定的4/8个字节(32位平台/64位平台)。
- 指针是有类型的,指针的类型决定了指针±整数的步长,指针解引用的时候的权限。
- 指针的运算。
在指针的类型中我们知道有一种指针类型为字符指针char*;
一般使用:
#includeint main() { char ch = 'w'; char* pc = &ch;//*pc可以访问到ch里面 printf("%cn", *pc);//这里*pc打印结果应为'w' *pc = 'b';//这里利用*pc改变了ch中的值 printf("%cn", *pc);//打印结果应为'b' return 0; }
还有一种使用方法:
int main()
{
const char* pstr = "hello world";//这里是把一个字符串放到pstr指针变量里了吗?
printf("%sn", pstr);
return 0;
}
代码const char* pstr = "hello world";很容易让我们以为是把字符串hello world 放到字符指针pstr里了,但是本质是把字符串hello world首字符的地址放到了pstr中。
上面代码的意思是把一个常量字符串的首字符h的地址存放到指针变量pstr中。
小技巧:
#includeint main() { char* pstr = "hello world";//这里是把一个字符串放到pstr指针变量里了吗? *pstr = 'w'; printf("%sn", pstr); return 0; }
当我们像上面这样修改*pstr时,编译器不会报错,但是会崩溃,打印不出结果,所以我们在char*前面加上const用来保护*pstr不被改变,这样就提高了代码的安全性。
那就可能有这样的面试题:
请判断下面str1 and str2;str3 and str4的关系
#includeint main() { char str1[] = "hello world"; char str2[] = "hello world"; const char* str3 = "hello world"; const char* str4 = "hello world"; if (str1 == str2) printf("str1 and str2 are samen"); else printf("str1 and atr2 are not samen"); if (str3 == str4) printf("str3 and str4 are samen"); else printf("str3 and str4 are not samen"); return 0; }
输出结果为:
这里的str3和str4指向的是同一个常量字符串。C/C++会把常量字符串存储到单独的一个内存区域,当几个指针指向同一个字符串时,他们实际会指向同一个内存。但是用相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块,所以str1和str2不同,str3和str4相同。



