• 数组、字符串


     一、数组的定义

    1、定义

       声明数组的类型

      声明数组的元素个数(需要多少存储空间)

    2、格式

       元素类型 数组名[元素个数];

      比如:int ages[3];

    3、简单使用

      简单初始化:int ages[5] = {19, 19, 20, 21, 25};

      元素有顺序之分,每个元素都有一个唯一的下标(索引),从0开始

      数组元素的访问:a[i]

     4、初始化

      初始化方式:

      int a[3] = {10, 9, 6};

      int a[3] = {10,9};

      int a[] = {11, 7, 6};

      int a[4] = {[1]=11,[0] = 7};

      常见错误:

      int a[];

      int[4] a;

      int a[b];

      a = {10, 11};

      a[4] = {10,9,8,5};

    5、内存分析

      数组存储空间的大小

      存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)

      数组名的作用,查看元素地址

      数组越界的注意

    二、二维数组

    1、什么是二维数组

      一个数组能表示一个班人的年龄,如果想表示很多班呢?

      什么是二维数组?int ages[3][10]; 三个班,每个班10个人

      相当于3行10列

      相当于装着3个一维数组

      二维数组是一个特殊的一维数组:它的元素是一维数组。例如int a[2][3]可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素

    2、存储

      存储大小

      存储结构和顺序

      存储地址问题

    3、初始化

      int a[3][4] = {1,2,3,4,5,6};

      int a[3][4] = {{},{},{}};

      数组元素简单访问

      int a[][5] = {3,21,31,2,32,1};

      注意错误:

      int a[3][4];

      a[3] = {};

    三、字符串

    1、什么是字符串

      简单的字符串”itcast”

      一个’i’是一个字符

      很多个字符组合在一起就是字符串了

     2、字符串的初始化

      char a[] = “123”;  和 char a [] = {‘1’,’2’,’3’};的区别,可以比较大小

      “123”其实是由’1’、’2’、’3’、’’组成

      “123”的存储分布

      字符串的输出”%s”,’’是不会输出的

    3、的作用

      输出char a[] = {‘o’,’k’};

      在char a[]前面搞个”cj”

      输出”cj”

      再输出a

      char a[] = {‘i’,’t’,’’,’c’}; 

    4、常用字符串处理函数

      strlen(注意中文)

    5、字符串常量、变量:

      字符串常量(也叫字符串字面量),是用双引号扩起来的字符序列。如:

    1 ”Hello World”
    2 ”I’m a string literal.”
    3 ”He was called “The NO.1”” //等等。(注意字符串中可能存在的转义序列)

      存储字符串:

      在C语言中,没有专门的字符串类型,通常使用字符数组来存放字符串;通常情况下,在不赋值的时候,字符数组中各个元素默认值为’’;在存储字符串时最好以空字符’’结尾。

      字符串变量:

      当声明用于存放字符串的字符数组时,始终要保证字符数组的长度比字符串的长度多一个字符,因为C语言规定每个字符串都要以空字符’’结尾。如果没有为空字符预留位置,可能会导致程序运行时出现不可预知的结果。系统字符串函数都是假设字符串是以空字符结束的。【我们可以规定一个字符串的长度,那么声明字符数组的长度就是这个规定长度+1(至少能存入字符串并能保存结尾空字符’’),至于字符串里最终存了多少字符,可以通过确定空字符’’的位置来确定】

      初始化字符串变量:

    1 char s[12] = {‘H’,’e’,’l’,’l’,’o’,’ ’,’W’,’o’,’r’,’l’,’d’,’0’};
    2 
    3 char s[12] = “Hello World”; //最后一位空字符’’结尾
    4 
    5 char s[] = “Hello World”; //声明时忽略长度,编译器根据字符串长度自动分配空间(常用于字符串很长的情况)

      C语言允许使用char *指针变量指向一个字符串:

    1 char s[] = “Hello World”; //声明为字符数组
    2 
    3 //char *s = s;
    4 
    5 char *s = “Hello World”; //声明为字符指针,指针指向了H的首地址。

      以上两种声明字符串的形式都可以,但是二者是有区别的:

      1⃣️声明为数组时,s为数组名(首地址),可以修改数组中的元素字符;

      2⃣️声明为指针时,s为指针变量,不可以直接修改指针变量内容(地址),除非指向其他字符串;

      3⃣️如果需要修改字符串内容,那么我们就建立字符数组来存储字符串;字符指针变量并不会为字符串分配空间,他只能指向一个字符数组或者一个字符串常量;

    6、字符串的输入输出:

    • scanf()、printf()
    • gets()、puts()
    • 通过数组访问、指针访问方式,读取、访问字符串中的字符

      //printf可以输出多个字符串,puts每次只能输出一个字符串,并且自动换行.

      字符串输入scanf  gets的区别:

      相同:输入结束以后自动在结尾加。

      不同:scanf可以接受多个字符串,gets只可以接受一个字符串;gets可以接受空格、tab键。

    7、C语言字符串库函数(#include <string.h>):

    • strlen():求字符串长度
    • strcpy():字符串拷贝
    • strcat():字符串拼接
    • strcmp():字符串ASCII顺序比较
     1 //strlen():求字符串长度
     2 char a[10] = {'x','y',''};
     3 printf("%d
    ",strlen(a));
     4 
     5 //strcpy():字符串拷贝
     6 char a[10];
     7 char b[] = "LKH";
     8 printf("%s
    ",strcpy(a,b));
     9 printf("a = %s
    ",a);
    10 
    11 //strcat():字符串拼接
    12 char b[] = "LKH";
    13 strcat(b,"abc");
    14 printf("%s
    ",b);
    15 
    16 //strcmp():字符串ASCII顺序比较,比较两个字符串是否一样。
    17 char b[] = "khl";
    18 char a[] = "lkh";
    19 printf("%d
    ",strcmp(b,a));

      注:字符串常量就是字符数组;字符串的内部表示使用一个空字符’’作为串的结尾,因此存储字符串的物理存储单元数比括在双引号中的字符数多一个。C语言对字符串的长度没有限制,但程序必须扫描完整个字符串后才能确定字符串的长度;标准库函数strlen(s)可以返回字符串参数s的长度,但长度不包括末尾的’’。

      比较规则讲解:http://blog.csdn.net/wgenek/article/details/7257435

    四、字符串数组

    1、使用场合

    * 一维字符数组中存放一个字符串,比如一个名字char name[20] = "cj"

    * 如果要存储多个字符串,比如一个班所有学生的名字,则需要二维字符数组,char names[15][20]可以存放15个学生的姓名(假设姓名不超过20字符)

    * 如果要存储两个班的学生姓名,那么可以用三维字符数组char names[2][15][20]

    2、初始化

    char names[2][10] = { {'J','a','y',''}, {'J','i','m',''} }; 

    char names2[2][10] = { {"Jay"}, {"Jim"} }; 

    char names3[2][10] = { "Jay", "Jim" };

    3、字符串数组:

    对于字符串数组的存储:

    char planets[][8] = {“Mercury”,”Venus”,”Earch”,”Mars”,”Jupiter”,”Saturn”,”Uranus”,”Neptune”,”pluto”};

      

      以这种方式存储是比较浪费空间的;而以字符指针数组的方式存储相对来说会更好些:

    char *planets[9] = {“Mercury”,”Venus”,”Earch”,”Mars”,”Jupiter”,”Saturn”,”Uranus”,”Neptune”,”pluto”};

      

    4、指针和字符串:

     1 //指针和字符串
     2 void test6()
     3 {
     4     //指针遍历字符串的元素
     5     char a[4] = "lkh";
     6     for(int i = 0;i<4;i++)
     7     {
     8         printf("%c
    ",a[i]);
     9     }
    10     char *p = a;
    11     for (; *p!= ''; p++) {
    12         printf("%c
    ",*p);
    13     }
    14 }
    15 
    16 //指针指向字符串
    17 void test7()
    18 {
    19     char *b = "Lmj";
    20 //    char *p ;
    21 //    *p = "like";   //这种写法是错误的
    22     printf("%s
    ",b);
    23 }
  • 相关阅读:
    loadRunner运行场景时,事务数为0或是只显示添加的事务的数
    loadrunner12自带的机票预订服务,解决httpd: Could not reliably determine the server's fully qualified domain name 问题
    Loadrunner12的下载和安装
    【AI测试】人工智能 (AI) 测试--第二篇
    【AI测试】人工智能 (AI) 测试--开篇
    CVAT 用户指南
    List of devices attached 没有手机设备号 解决办法
    Pip安装Django超时(time out)解决方法
    ipsec_笔记
    cisco 2600(转)
  • 原文地址:https://www.cnblogs.com/CJDog/p/4987276.html
Copyright © 2020-2023  润新知