c++ 二维数组赋值_C语言系列之数组(二)

博客介绍了C语言中字符串的定义方式,因C语言无string类型,需用字符数组定义字符串,规定‘\\0’为结束标志。使用双引号赋值时结尾默认加‘\\0’,单引号逐个赋值需手动添加,还提到可用strlen计算字符串长度。
在前一篇文章中已经写了一维数组的定义和使用,今天写二维数组和字符数组,它们的定义和一维数组的定义是一样的。二维数组定义如下:数据类型         二维数组名 [第一维数组长度][第二维数组长度];
int a[2][3];
定义了一个int型的二维数组,2行3列,共有2*3=6个元素,数组名为a。元素排列如下所示:
a[0][0],a[0][1],a[0][2]a[1][0],a[1][1],a[1][2]
二维数组在内存中的存储方式按行排列的,a[0]行,a[1]行,a[2]行;每一行的三个元素也是依次排列的。二维数组赋值有两种方式
a[2][3] = {{2,5,8},{9,3,0}};b[][]   = {{2,5,8},{9,3,0}};//a[2][3] = b[][];c[2][3] = {{2,5},{9,3,0}};//也可以部分赋值,没有赋值的部分系统会自动用0补齐
上面这种赋值方式是分行赋值,{2,5,8}表示a[0]行。如果用户没有声明二维数组是几行几列,那么赋值的时候就应该加{},将每一行的元素括起来。
a[2][3] = {2,5,8,9,3,0};
第二种赋值方式是将元素依次赋值给数组,数组会根据用户[][]中的声明,自动将数组转换为2行3列;如果没有声明行列的值,就不能使用此种赋值方式,因为编译器不知道你想要什么样的二维数组。二维数组的使用。题目:一个3*4的矩阵,要求输出其中最大值的元素的值,以及它的行号和列号。实现步骤:首先用for循环将二维数组中的每一个元素读出来,然后元素间进行比较,将大的给a[maxr][maxc];最后在for结束时打印a[maxr][maxc];的数值,并将maxr 和maxc的数值打印出来。
#include int main(){        int a[3][4] = {1,5,2,0,4,6,9,2,8,10,23,50};        int i,j,maxr,maxc;        maxr = maxc = 0;        for(i=0; i<3; i++)        {                for(j=0; j<4; j++)                {                        if(a[maxr][maxc] < a[i][j])                                maxr = i;                                maxc = j;                }        }        printf("max = %d  maxr = %d  maxc = %d\n",a[maxr][maxc],maxr,maxc);}

dcaf698945f516bd060fe3e084909b71.png

这个程序中i代表二维数组的行,j代表二维数组的列;因为内存数组是一维的,所以按照行序优先,因此第一个for循环先读取行,然后进入第二个for循环读取这一行的每一列,当这一列的元素都读完之后,返回到第一个for循环读取新的一列,一次循环,直到这个二维数组的最后一个元素。比如程序执行时,第一次进入外层for循环的时候读取a[0]行,然后进入里面的for循环,读取a[0]的每一列,a[0][0],a[0][1],a[0][2],a[0][3],然后返回到外层的for循环,读取下一行a[1],接着读取每一列,依次类推。字符数组:用来存放字符型数组的数组称为字符数组。它的定义和一维数组一样,区别在于赋值时需要用引号将元素引起来。
char s[5] = {'c','b','r','p','o','l'};char t[] = {'c','b','r','p','o','l'};//这两种赋值方式都可以char r[] = {"hello world"};char d[] = "c.168.12.f";
上面这四种赋值方式都是正确的,字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义之后,就只能一个字符一个字符地赋值了。请看下面的例子:
char str[5];str = "hi";//错误,正确方式如下str[0] = 'h';str[1] = 'i';

    在C语言中没有字符串(string)类型,所以如果要定义一个字符串,只能通过字符数组完成。因为字符串是连续的,所以在内存中如果要找到一个字符串,除了知道从什么地方开始,还要知道从什么地方结束,所以C语言中规定‘\0’为字符串的结束标志。所以上述的赋值例子中下char r[]和char d[]是字符串,因为使用双引号给字符数组赋值时,在存储空间足够时,结尾会默认加‘\0’,因此如果想定义字符串时,一定记得给‘\0’留一个位置。

char r[] = {"hello world"};char d[] = "c.168.12.f";char h[4] = "fine";//错误,因为fine本身已经有4个字符了,\0就没有位置了char a[5] = "fine";//正确

但是单引号逐个赋值时并不会默认加‘\0’,所以需要在赋值时加上。

char h[5] = {'f','i','n','e','\0'};//这样才是一个字符串,而不是单个字符char s[]  = {'a','b','1','2','\0'};

字符串长度:strlen(计算这个数组有多少个元素)

在使用字符串长度这个函数的时候,它不会统计\0,所以上面这个例子中s[]这个数组的字符串长度是4。字符数组的使用:输入一个字符串,逆序输出。
#include #include int main(){        int i,j,n;        char str[30] = {0};//为了避免初始化时,实际元素个数少于声明的空间大小                          //而输出乱码的问题,在声明时直接全部初始化为0        printf("请输入一个字符串:");        gets(str);        n = strlen(str);        for(i=n-1; i>=0; i--)        {                putchar(str[i]);        }        putchar('\n');        return 0;}       

0fded3fc53b231c6d012dfc980045217.png

输入字符串之后,通过strlen得到字符串的长度,然后利用for循环完成逆序。逆序过程就是将最后一个字符和第一个字符交换,倒数第二个和正数第二个交换。上面这个程序中字符串长度为5,但是数组下标是从0开始,所以需要用字符串长度减去一,得到最后一个字符的下标,这个程序中是a[4],然后将它打印出来,依次类推,下一个打印a[3],直到将所有字符都打印出来,即i=0时,退出循环。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值