一维数组、二位数组、字符串数组详解

目录

数组简述

一维数组的定义

一维数组的初始化

二维数组的定义

二维数组元素的引用

多维数组

字符数组和字符串

字符数组

字符串

二维字符串数组

数组简述

  • 数组是构造类型之一
  • 数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素。
  • 数组中个元素的数据类型要求相同,用数组名和下标确定,数组可以是一维的也可以是多维的。

一维数组的定义

  • 所谓一维数组是指只有一个下标的数组,它在计算机的内存中是连续存储的。
  • C语言中,一维数组的说名一般形式如下:
    <存储类型> <数据类型> <数组名> [<表达式>] 例如:int a[6];
    • 数组名表示内存首地址,是地址常亮,sizeof(数组名)是数组的内存空间。

例:

#include<stdio.h>
int main (void)
{
        int a[10];
        int i ;
        for(i = 0;i<10;i++)
                printf("%p\n",&a[i]);
        return 0;
}

运行结果:

0x7ffd148f8a20
0x7ffd148f8a24
0x7ffd148f8a28
0x7ffd148f8a2c
0x7ffd148f8a30
0x7ffd148f8a34
0x7ffd148f8a38
0x7ffd148f8a3c
0x7ffd148f8a40
0x7ffd148f8a44
  •  注:程序运行是在linux系统下运行得到的结果,每个人运算得到的结果有可能都会不一致的。

    %p是打印地址信息的格式输出控制符

一维数组的初始化

  • 初始化方式:在定义数组时,为数组元素赋初值
  •  int a[5] = {1,2,3,4,5};
  • 说明
  •  数组不初始化,其元素值为随机数
  •  对static数组不赋初值,系统会自动赋以0值
  •  只给部分数组元素赋初值

对于第2条:

static int a[5];
等价于:
a[0];a[1] = 0;a[2] = 0;a[3] = 0;a[4] = 0;

例:数组只给部分元素赋初值,剩余元素以0代替

#include<stdio.h>
int main (void)
{
        int a[10] = {1,5,6,8};//数组初始化部分元素
        int i ;
        for(i = 0;i<10;i++)
                printf("%p,%d\n",&a[i],a[i]);//打印数组数值
        return 0;
}

运行结果:

0x7ffc991407e0,1
0x7ffc991407e4,5
0x7ffc991407e8,6
0x7ffc991407ec,8
0x7ffc991407f0,0
0x7ffc991407f4,0
0x7ffc991407f8,0
0x7ffc991407fc,0
0x7ffc99140800,0
0x7ffc99140804,0

二维数组的定义

  • 定义方式:(声明时列数不能省略,行数可以省略)
  • 数据类型 数组名[常量表达式][常量表达式]

例如:

int a[3][3];
float b[5][3];
  • 数组元素的存放顺序
  • 二维数组是按照行序优先进行存储的,因为内存是一维的,所以二维数组需要按照先后顺序进行存储。

例如:int a[2][3]

a[0][1]a[0][2]a[0][3]
a[1][1]a[1][2]a[1][3]

先存储a[0][1],再存储a[0][2]

例:

#include<stdio.h>
int main(void)
{
	int a[2][3];
	int i,j;
	for(i= 0;i<2;i++)
	{
	    for(j = 0;j<3;j++)
	        printf("%p ",&a[i][j]);//打印数组地址
	    printf("\n");   
	}
	/*打印数地址以及数组长度*/
	printf("%p %ld\n",a,sizeof(a));
	/*打印第一行数组地址以及数据数组长度*/
	printf("%p %ld\n",a[0],sizeof(a[0]));
	/*打印第二行数组地址以及数据数组长度*/
	printf("%p %ld\n",a[1],sizeof(a[1]));
	return 0;
}

运行结果:

0x7fff263db870 0x7fff263db874 0x7fff263db878 
0x7fff263db87c 0x7fff263db880 0x7fff263db884 
0x7fff263db870 24
0x7fff263db870 12
0x7fff263db87c 12

二维数组元素的引用

  • 形式:数组名[下标][下标]
  • 二维数组元素的初始化
    • 分行初始化
    • 按元素排列顺序初始化

分行初始化
例:int a[2][3]={ {1,2,3},{4,5,6}};

按元素排列顺序初始化
例:int a[2][3]={1,2,3,4,5,6};

多维数组

具有两个或两个以上下标的数组称为多维数组。

例: int a[2][3][4];//是三维数组

三维数组在实际的应用中已经很少了,在此就不再多做介绍。

字符数组和字符串

目标:

  • 掌握字符数字的用法
  • 掌握字符串的用法

字符数组

字符数组是元素的数据类型为字符类型的数组 char c[10],ch[3][4];

字符数组的初始化

  • 逐个字符赋值 char ch[5] = {‘B’,’o’,’y’};
  • 用字符串常量char ch[6] = {“hello”};char ch[] = “hello”;

例:

#include<stdio.h>
int main()
{
    int i,n,n1;
    char ch[] = {'a','b','c'}; //字符
    char ch1[6] = {'a','b','c'};//字符串,空余的位数用'\0'表示
    
    n = sizeof(ch)/sizeof(char) //字符串长度
    for(i = 0;i < n;i++)
    {
        putchar(ch[i]);//循环打印字符
    }
    putchar('\n');
    n1 = sizeof(ch)/sizeof(char)  //字符串长度
    for(i = 0;i < n1;i++)
    {
        putchar(ch[i]);//打印字符串
    }
    putchar('\n');
    return 0;
}

运行结果:

abc
abc

字符串

  • C语言中无字符串变量,用字符数组处理字符串

  • 字符串结束标志:’\0’。

例 char str[] = “hello”;

表示字符长度为5,结尾以’\0’结束。

二维字符串数组

字符数组初始化

char fruit[][10] = {"apple","orange","pear","peach","banana"};
  • 表示二维数组有5行,10列。

#include<stdio.h>
int main(void)
{
    char fruit[][10] = {"apple","orange","pear","peach","banana"};
    int i,k;
    
    k = sizeof(fruit)/sizeof(fruit[0]);//表示一共有多少行
    
    for(i = 0;i < k;i++)
    {
        printf("%s\n",fruit[i]);
    }
    return 0;
}

运行结果:

apple
orange
pear
peach
banana

程序举例:字符串字符逆序

#include<stdio.h>
#include<string.h>
#define N 20
int main(void)
{
	char arr[N] = {0};
	char temp;
	int i = 0,j,n,k;
	
	printf("Plaese input a string!\n");
	gets(arr);
	n = strlen(arr);
	j = n-1;
	while(i<j)
	{
		temp = arr[i];
		arr[i] = arr[j];
		arr[j] = temp;
		i++;
		j--;
	}		
	puts(arr);
	return 0;
}

运行结果:

Plaese input a string!
apple
elppa
    原文作者:扇贝丫丫
    原文地址: https://blog.csdn.net/weixin_55420595/article/details/120855799
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞