对于指针,到此处的读者对于都有着不少的独自认识与了解!因此,笔者也不敢托大!作为一个浅浅的小白,写篇指针的进阶,来祈祷大佬的指教!
首先,笔者先对指针进行初步回顾一下!
1.指针就是变量,用来存放地址,地址唯一标识的一块内存空间!
2.指针的大小是固定的4/8个字节(32位平台/64位平台)!
3.指针是有类型,指针的类型决定了指针走一步(+,-)整数的步长!指针解引用操作的时候的权限!
4.指针的运算!
下面步入正题:
1.字符指针:char * 类型
- char ch = 'W';
- char* pc = &ch;
这段是我们所熟悉的!但是对于再字符串指针中:
- #include
- int main()
- {
- char* ps = "abcdef";
- printf("%c\n", *ps);
- return 0;
- }
而最后的打印结果为:a
对于打印结果,不少人有着疑惑,但结果确实是这样的!

在这里面 char* ps = "abcdef",仅仅是将 字符串的首地址(a的地址)传递给了指针ps;
并不是将abcdef存放到ps里面,而是存放的a的地址!因此再printf("");语句里面,对其解引用,得到的结果为a ;
2.在上述代码中: char* ps = "abcdef"; 为字符串常量,
下面笔者对上述代码段进行简单更改!
- #include
- int main()
- {
- char* ps = "abcdef";
- ps = 'w';
- printf("%c\n", *ps);
- return 0;
- }
然而最后的打印结果为:什么都不打印!!!

是滴!我没有说错,你也没有看错!最后的打印结果确实为:什么都没有!!!
主要原因为:字符串常量不可修改!
-
- #include
- int main()
- {
- char* ps = "abcdef";
-
- printf("%s\n", ps);
- return 0;
- }
对于上述代码,与第一个代码不同的是在于printf(""); 语句里面的%s; %s:打印字符串,而打印字符串只需要知道起始位置就可以,而ps里面放的是‘a'的地址!则可以顺序打印出来abcdef;
因此最后的打印结果为: abcdef

3.字符串的比较
- #include <stdio.h>
- int main()
- {
- char ch1[] = "hello jiyuan";
- char ch2[] = "hello jiyuan";
-
- const char* ch3[] = "hello jiyuan";
- const char* ch4[] = "hello jiyuan";
-
- if (ch1 == ch2)
- {
- printf("相同\n");
- }
- else
- {
- printf("不相同\n");
- }
-
- if (ch3 == ch4)
- {
- printf("相同\n");
- }
- else
- {
- printf("不相同\n");
- }
- return 0;
- }
在上述代码中,笔者首先定义了两个数组: ch1[], ch2[]; 在这两个数组里面,输入的字符串是一样的,但是再内存中,开辟了两个地址来存放这两个字符串,因此地址是不一样的!
然后笔者定义了两个:const char* 类型的字符串: ch3[], ch4[];里面存放着相同的字符串,常量字符串不能修改!则,存放ch3[] 与存放ch4[] 元素的地址相同!
然而,在下方if语句里面,咋一看吓到了不少人,但是,数组名是数组首元素的地址!所以,在if语句里面比较的是:地址!
所以最后的结果显而易见!
如果读者想比较字符串的内容,则可以使用库函数:strcmp();
即:ch1[] 与 ch2[] 一样 ; ch3[] 与 ch4[] 一样!在此笔者就不做过多的讲述!