在前一篇文章中已经写了一维数组的定义和使用,今天写二维数组和字符数组,它们的定义和一维数组的定义是一样的。二维数组定义如下:数据类型 二维数组名 [第一维数组长度][第二维数组长度];
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);}
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;} 
博客介绍了C语言中字符串的定义方式,因C语言无string类型,需用字符数组定义字符串,规定‘\\0’为结束标志。使用双引号赋值时结尾默认加‘\\0’,单引号逐个赋值需手动添加,还提到可用strlen计算字符串长度。
3107

被折叠的 条评论
为什么被折叠?



