数组的理解与操作
二: 数组理解与操作
1:定义初始化
普通的一维数组也就没什么太大的区别了,要说区别话,也可能只是类型的问题。
(1)初始化一维数组
一写可以尝试的初始化,这里就举例数值型和字符型
#include<stdio.h>
#include<windows.h>
int main()
{
int a[] = {};
int a1[] = {1,2,3,4};
int a2[5] = {};
int a3[5] = {1,2,3,4,5};
char s1[] = {"Hello Everyone"};
char s2[] = {'a','b','c','\0'};
char s3[10] = {'a','b','\0'};
char s4[10] = {"Hello "};
//printf("%d",a[0]);
system("pause");
}
(2)初始化二维数组
我们还是以数值型和字符型举例
#include<stdio.h>
#include<windows.h>>
int main()
{
int array[3][4] =
{
{0,1,2,3},
{4,5,6,7},
{8,9,10,11}
};
int array1[][4] =
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16},
{17,18,19,20}
};
int array2[][5] =
{
};
system("pause");
char words[][4] =
{
{'a','b','c','\0'},
{'d','e','f','\0'}
};
char words_1[][6] =
{
"boy","hello","yes","right","what"
};
char words_2[][4] =
{
};
char words_3[3][4] =
{
{'a','b','c','\0'},
{'e','f','g','\0'},
{'i','j','k','\0'}
};
}
2:给数组赋值
谈到给数组赋值,在一些老版本说明中,比如一维数组是必须要有常量来规定初始化的数组的大小的,就算是二维数组也要至少指定列。但是c语言版本c99后好像是可以动态赋值了,意思是你可以定义一个n,然后int[n],n需要输入即可,但是在我的版本里面这是万万不行的。
1:给整形数组赋值
我们还是按照常规的方法给数组赋值,举一个给整型二维数组赋值的例子。
#include<stdio.h>
#include<windows.h>
int main()
{
int arr[3][4] = {0};
for(int i =0;i<3;i++){
for(int j =0;j<4;j++){
scanf("%d",&arr[i][j]);
}
}
for(int i =0;i<3;i++){
for(int j =0;j<4;j++){
printf("%d,",arr[i][j]);
}
}
system("pause");
}
赋值的时候一定要记得记得取地址,&,不加这个符号意味着你要改变地址,这怎么能让你随便改呢?
2:给字符型数组进行赋值
当然也可以通过函数赋值,也可以手动介入。
#include<stdio.h>
#include<windows.h>
int main()
{
// int arr[3][4] = {0};
// for(int i =0;i<3;i++){
// for(int j =0;j<4;j++){
// scanf("%d",&arr[i][j]);
// }
// }
// for(int i =0;i<3;i++){
// for(int j =0;j<4;j++){
// printf("%d,",arr[i][j]);
// }
// }
char name[10];
scanf("%s",name);
printf("the value is:[%s]",name);
system("pause");
}
这个是空格结束的
但是可以呢,如果输入的大于定义的长度呢?你看竟然也输出来了。???
还可以通过gets()函数
#include<stdio.h>
#include<windows.h>
int main()
{
char name[10];
gets(name);
printf("the value of name is %s",name);
system("pause");
}
fgets()函数,这个也是赋值
#include<stdio.h>
#include<windows.h>
int main()
{
char name[10];
//name 字符串 ,10 长度, stdin默认输入设备
fgets(name,10,stdin);
printf("the value of name is %s ",name);
system("pause");
}
当然还有其它的赋值方法,就不再举例了。
当然二维字符数组也可以赋值,道理是一样的,举例一个比较简单的赋值方法,你比如。
#include<stdio.h>
#include<windows.h>
int main()
{
char str[3][20];
strcpy(str[0],"abcccc")
strcpy(str[1],"asnksnaks");
strcpy(str[2],"shdjkhdkjdk");
printf("%s\n",str[0]);
system("pause");
}
这个还是很简单的。当然你也可以使用for循环进行赋值
那么举例一个使用for循环给二维数组赋值
#include<stdio.h>
#include<windows.h>
int main()
{
char str[3][20];
// strcpy(str[0],"abcccc");//或者用sprintf(str[0],"123");
// strcpy(str[1],"asnksnaks");//或者用sprintf(str[1],"456");
// strcpy(str[2],"shdjkhdkjdk");
// printf("%s\n",str[0]);
// system("pause");
for(int i =0;i<3;i++){
scanf("%s",&str[i]);
}
printf("%s",str[0]);
system("pause");
}
2:一维数组?二维数组?三维数组?
一维数组的化我们按照抽象出来的理解就是按照线性存储的方式罢了,二维的化也就是矩形,三维的化抽象出来也就是下面的这张图
什么?还有三维数组?
对啊,还有思维数组。不过只是未来理解,我们就讲到三维。
定义什么的就不需要赘述
其实你看啊,所谓的一维二维三维等等,只不过是抽象出来的概念。在内存中其实还是线性存放的。
就比如这样,下面一个二维数组。实际的存放方式是这样的。但是可能将其抽象化为矩形也是比较形象,不过我觉得,如果知道是线性的实际存放,在后面学习指针理解的化还是很有帮助的。
所以无论是多少维的数组,其在内存中的本质还是线性存放。
- 点赞
- 收藏
- 关注作者
评论(0)