字符数组(C语言)

导读:本篇文章讲解 字符数组(C语言),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

字符数组

我们开始在printf 函数参数中用过的字符串实际上是一个元素为字符的数组。例如,一个字符串“Hello” 实际上由‘H’,‘e’,‘l’,‘l’,‘o’ 这 五个字母字符与一个空字符\0 构成。
任何字符串的内部表示都会以空字符‘\0’ 作为结尾,所以很多时候我们写程序会通过检查空字符的方式找到字符串的结尾。
运行一下程序,你会发现它和我们直接去用printf(“Hello”); 输出时并没有什么结果上的区别。
看到一个这么复杂的给字符数组初始化的方式,

char string[] = {'H','e','l','l','o','\0'};

其实,在C语言中,提供了一种字符数组初始化的简化方式。请你将声明和初始化数组的语句改为:

char string[] = "Hello";
  1. 你可以再运作一下程序,看一看输出的结果是不是也是一样的呢?
    既然string 这个字符串 实际上是一个字符数组,我们就应该可以修改它中间任何一个字符。
    请在输出语句之后,通过赋值语句修改字符串string 的首位字符为w.
#include <stdio.h>

int main() {
    // char string[] = {'H', 'e', 'l', 'l', 'o', '\0'};
    char string[] = "Hello";
    printf("%s\n", string);
    string[0] = 'w';
    printf("%s\n",string);
    return 0;
}

  1. 现在我们已经将字符串string 的首位字符修改为了 w, 请通过printf(“%s”, string ); 再次输出string 的值。
  2. 这样我们就更明确的解释
char string = "Hello";

char string[] = {'H','e','l','l','o','\0'}; 

的等价性了。

字符串与字面量

我们在前面的课程中学习的“字符串”实际上是被更为严谨地称为 字符串字面量(string literal) 。它在我们写的程序中表现为一对双引号包裹的 0 个或多个字符。例如”Hello”和””都是符合定义的的字符串字面量。
字面量(literal) 并非仅包含字符串字面量,我们在之前的程序设计过程中,已经大量使用了它。
例如

int a;
a = 1234;

这个语句中的1234其实就是一个整数型字面量,在这个赋值过程中,我们实际上是将一个整数型字面量的值放入了一个整数型变量中作为值。

在字面量后,我们往往会增加一个后缀标记类型。

  • 长类型(long)字面量,我们会加一个l或L,例如1234L。
  • 无符号字面量(unsigned)以字母u或U作为后缀,例如345U。
  • 后缀f或F则用于标记单精度浮点型(float)字面量,例如3.14F或1e-2f。不增加后缀的浮点型字面量均为双精度浮点型(double)字面量。

另一种字符串

#include <stdio.h>

int main() {
    char string[] = "Hello";
    printf("%s\n", string);
    char *string2 = "Hello";
    printf("%s\n", string2);
    printf("%p\n",&string);
    printf("%p\n",string2);
    printf("%p\n",&"Hello");
    return 0;
}

除了用字符数组去存储字符串,我们还可以声明一个用存储字符地址的变量操作字符串。
请在现在已经给出的代码中输出语句后写下:

char *string = "Hello";
printf("%s\n",string2);

运行一下程序,你不难发现,第二种写法的输出结果和第一种字符数组的没有什么区别。
但是,它们的工作原理是不同的, char *string = “Hello”; 的写法实际上在 String2 这个变量中保存了 “Hello” 这个字符串字面量在程序运行时在内存中的地址。
同时,请注意,因为“Hello” 是一个字符串字面量,所以我们没有办法直接通过string 2 来对字符串做修改的。
接下来请在return 0; 前输入:

#include <stdio.h>

int main() {
    char string[] = "Hello";
    printf("%s\n", string);
    char *string2 = "Hello";
    printf("%s\n", string2);
    printf("%p\n",&string);
    printf("%p\n",string2);
    printf("%p\n",&"Hello");
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/76944.html

(0)

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!