有任何不懂的问题可以评论区留言,能力范围内都会一一回答
#define _CRT_SECURE_NO_WARNING
#include <stdio.h>
int main(void) {char a= 'w';char* b = &a;*b = 'q';printf("%c\n",*b);return 0;
}
这是字符指针的普通用法,和一般指针无二
这一期我们重点讲一下字符指针的特殊用法
我们直接先上代码
看起来这个字符串函数和字符数组好像没有啥区别啊
但是注意:
(1) char* a = "hello ly";是把字符串首字符的地址赋给a
(2)字符指针指向的是常量字符串,被指向的字符是不可被修改的,因此*a='f';是错误的,会使程序出问题,因此我们不希望这个常量字符串被修改,因此加个const会更安全,比如const char* a = "hello ly";
(3)printf("%s\n",*a);是不可以的,a是char*类型,只能访问一个字节,因此只能打印一个字符,而无法打印整个字符串
(4)打印字符串时,只需要提供字符串首元素地址就可以了
因此printf("%s\n",a);就可以了
感觉说了这么多,要不上一道题目吧
这个题来自于剑指offer,我稍微改了点数值
#include <stdio.h>
int main(void) {char str1[9]= "hello bit";char str2[9]= "hello bit";char* str3 = "hello bit";char* str4 = "hello bit";if (str1 ==str2)printf("same\n");elseprintf("not sane\n");if (str3== str4)printf("same\n");elseprintf("not sane\n");return 0;
先不看后面答案,思考一下结果是啥
上面这张图解来自比特鹏哥
首选我们先看str1和str2,这是两个不同的数组,开辟了两个不同的空间,但是空间中放着都是同样类容,但是由于是两个不同的空间,因此他们的地址是不相同的,所以结果是not same
那我们再来看str3和str4,str3和str4指向的都是常量字符串,常量字符串是不可被修改的,那两份一样不可被修改的东西我们有必要去开辟两个空间存放吗?显然没必要。
内容相同的常量字符串只用保存一份就够了!
因此此时str3和str4指向的都是同一个字符串,因此它们的地址是相同的,所以结果是same
以上就是本期的全部知识点,最近几章感觉都写的好短,主要是这些单个知识点东西确实不多。
就延续老传统,最后以一张思维导图做结尾吧