总结

  1. 无论是中文还是其他语言,文字本身是图形符号。
  2. 传输和描述图形是一件很麻烦的事;
  3. 所以,如果只是要描述和传输字母,传输它们的编码更为方便。
  4. 实际上,在计算机的文件中、内存中存储字符时,存储的是它们的编码。
    ABC → 65 66 67
  5. 在显示字符时,底层驱动(硬件或软件)会自动根据编码取出字库中这个字符的图形数据,并将其绘制在显示设备上。
    65 → 显存地址
  6. C语言使用char数据类型存储字符的编码
  7. 字符编码中除了常用字符(A-Z,a-z,制表符),还有控制字符(用于控制显示或打印设备的字符)
    回车符(13)——控制打印机的打印头移动到最左侧
    换行符(10)——控制打印机滚轴滚动一行
    Beep(7)——控制打印机或者计算机发出铃声
  8. 字符变量——char类型变量其实存放的是一个编码,这个编码是整型值,所以可以直接将整型值赋值给char类型变量。
  9. 字符常量——但是,写程序的时候不能记得每一个字符的编码,所以我们可以使用字符常量来表示一个字符,字符常量就是以一对单引号包含的单个字符;
  10. C语言不提供用于存储字符串的基础数据类型,如果要存储多个字符,有两种方式:
    a) 字符串常量
    由一对双引号包含的多个字符,称为字符串常量。
    程序中字符串常量,编译器会自动根据其中的字符个数为其分配内存,分配的大小是(字符的个数+1),将字符存储进去,并将最后一个字节设置为0,ASCII码值为0的字符约定俗成的被当做字符串结束的标志。
    Question:字符串常量的值是什么?
    Answer: 字符串常量的值,是内存中存储这个字符串的内存空间的首地址。

b) 单独分配指定大小的内存空间,用以存储可变的字符串。

  1. 在使用printf函数时,如果使用%s作为占位符输出字符串,使用的语句是:
    printf("%s", str);
    此时,printf函数会从指针变量str指向的位置开始输出字符

实例

项目一

在下面的程序中的main内添加代码,不使用printf函数显示指针变量str指向的字符串。

#include <stdio.h>  
int main()  
{     
    char* str= (char*)"Hello,World";  
    printf("这个字符串被存储在首地址为%p的内存空间\n", str);  

   return 0;  
}  

1.for循环版

#include <stdio.h>
int main() //------------for循环版
{
    char* str = (char*)"Hail Hdyra!";

    for (int x = 0; x <= 999; x++)
    {
        char i = *(str + x);
        if (i == 0)
        {
            break;
        }
        putchar(i);
    }

    return 0;
}

2.while循环版

#include <stdio.h>
int main() //-------------while循环版
{
    char* str = (char*)"Hail Hdyra!";
    while (*str != 0)
    {
        putchar(*str);
        str++;
    }
    return 0;
}

项目二

自定义一个函数printString,使这个函数用于显示字符串的每个字符和它所在内存空间的地址

/*
ProgramName:定义printString函数用于显示字符串的每个字符和它所在内存空间的地址
Date:2020年3月16日00点22分
Author:KrisWi
*/
#include <stdio.h>
int printString(const char* str); //函数printString的声明
int main()
{
    char* PutStr = (char*)"Hail Hydra!";
    printString(PutStr);

    return 0;
}

int printString(const char* str)
{
    while (*str != '\0')
    {
        putchar(*str);
        printf("这个字符存储在地址为%p的内存空间里\n", str);
        str++;
    }
    return 0;
}
最后修改:2023 年 10 月 13 日
如果觉得我的文章对你有用,请随意赞赏