美文网首页
C语言中的指针与字符串

C语言中的指针与字符串

作者: 天黑北风吹 | 来源:发表于2016-08-12 14:30 被阅读74次

仔细的看了指针和数组的关系,也知道字符串也是一个数组,是字符拼凑的数组,所以也把字符串也叫字符数组。
先来复习下如何声明一个字符串?

char s[] = {'m','j', '\0'};
char s[] = "mj"; //另一种方式。自动在最后加\0

在内存的中的展现形式就是:

01.png

由于,字符串其实也是一个数组,数组与指针的亲密关系,那与字符串关系理论上也是一样。

指针指向字符串

看下,如何用一个指针指向一个字符串,其实和数组一样:

char s[] = "mj"; //定义一个字符串
char *p = s; //定义一个指针p指向 字符串 s

你看,是不是和数组的一模一样。在内存中的呈现,也是一样的:

a.png

所以,p++ 也是移动指针,指向字符串中的下一个元素,由于字符占一个字节的空间,所以,p+1也就只需要移动一个空间的位置。*(p+1)就是取下一个元素的值。

来一个例子,利用指针的移动来遍历字符串里的所有值:

char s[] = "yangyinizhegedashabi";
char *p = s;
for (; *p!='\0'; p++) {
    printf("%c\n", *p);
}

就会输出:

y
a
n
g
y
i
n
i
z
h
e
g
e
d
a
s
h
a
b
i

直接给指针赋值成字符串

上面的是指针间接的指向一个字符串,也可以这样,直接把字符串赋值给一个指针:

char *p = "mj";
int len = strlen(p);
printf("字符串长度:%d", len); //2

上面是直接把一个字符串赋值给一个指针。strlen()函数是求一个字符串的长度,参数是一个字符串,但是我们这里传入的是指针,说明,指针和字符串是可呼唤的。

我们看这个函数的定义:

size_t     strlen(const char *);

它的参数时一个指针常量。其实,我们传入一个字符串的名字,其实也就是传入了这个字符串的首地址。

我们再看printf函数的定义:

printf(const char *restrict, ...)

看。参数都是一个指针字符常量。所以,可以直接定义指针。

所以总结下:

通过指针方式定义的字符串,是一个字符串常量,所以不要再给它赋值什么的都是错误的:

char *s = "mj";
*s = "like";

分析一下:上面的犯了2个容易搞混淆的错误。1是 (*s)表示字符串“mj”的首元素的地址,也就是'm'的地址,占用的空间,只占1个字节,你用"like"去填充1个字节,益处了,报错。
2是,用char *s = "mj"这种方式定义的字符串,其实是常量了,s 指向一个常量,常量是不可改变的。也会报错。

所以可以看出:

char a[] = "lmj";定义的是一个字符串变量! 
char *p2 = "lmj";定义的是一个字符串常量!

https://www.zybuluo.com/phper/note/132480

相关文章

  • 慕课网-Linux C语言指针与内存-学习笔记

    Linux C语言指针与内存 工具与原理 指针 数组 字符串 堆内存与栈内存 gdb内存调试工具。 C语言中指针的...

  • strlen, sizeof(), length的区别

    strlen C,C++语言中的函数,用于计算当前指针变量 const char * (字符串)的字符串长度,以\...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • C语言学习10.字符串和相关函数

    C语言中,没有string类型,有三种表现形式:字面值常量,字符串数组,字符串指针。字符串指针变量:指向字符串的头...

  • C语言进阶

    指针 指针也是变量,在C语言中扮演者重要的角色。有许多使用指针的理由,比如: 字符串(string) 函数里按引用...

  • C语言中的指针与数组

    C语言中的指针与数组 @(C语言)[排序算法, 快速排序, C实现] 引言 相信指针与数组是不少同学在初学C语言时...

  • C语言中的指针与字符串

    仔细的看了指针和数组的关系,也知道字符串也是一个数组,是字符拼凑的数组,所以也把字符串也叫字符数组。先来复习下如何...

  • 指针与数组的区别和联系

    原文地址:指针与数组的区别和联系作者:zhenhuaqin 一.指针与数组的联系: 指针与数组是C语言中很重要的两...

  • 11-29

    经历 编译原理上课 微机原理上课 看《c与指针》中数组和字符串部分 web应用开发上课 在简书上总结了c语言中ty...

  • iOS开发 -- C语言基础8(指针)

    iOS开发 -- C语言基础8(指针) 指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很...

网友评论

      本文标题:C语言中的指针与字符串

      本文链接:https://www.haomeiwen.com/subject/rmzssttx.html