一文看懂c语言数组和字符串

数组

格式;

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

例:

int scores[10]       

相当于定义了10个int类型的变量,[]扩起来的是元素的个数

通过下标来获取元素,下标从0开始,到数组元素个数-1,scores[0]...scores[9]
scores[0]代表第一个元素。
数组下标越界:超出了数组元素下标的个数,会报错或乱码

数组初始化

方式一:

像变量赋值一样,为数组的元素一次赋值
int scores[10]={1,2,3,4,5,6,7,8,9,0};

方式二:

一次为数组前面的元素赋值,如果数组长度超过元素个数,后面的值全部初始化为0
int scores[10]={0,1,2};  相当于int scores=[10]={0,1,2,0,0,0,0,0,0,0}

方式三:

如果不写元素个数,后边的值有几个,元素个数就是几个
int scores[]={1,2,3}   数组长度为3

遍历一维数组:

for(int i=0;i<(sizeof(arr)/sizeof(arr[0]));++i)
{

printf("%d",arr[i])

}

数组在栈区

数组的内存结构:是一块连续的内存

求出数组元素个数:

int n =sizeof(数组名)/sizeof(数组元素|数组数据类型)

数组逆置

int arr[10] = {1,24,3,9,5,6,17,8,2,11};
int i = 0;
int j = sizeof(arr) / sizeof(arr[0])-1;
while (i<j)
{
	int tom=arr[i];

	arr[i] = arr[j];
	arr[j] = tom;
	i++;
	j--;

}

冒泡排序

int arr[10] = {1,24,3,9,5,6,17,8,2,11};
int x = sizeof(arr) / sizeof(arr[0]) - 1;
for (int z = 0; z <= x; z++) {
	for (int i = 0; i < x-z; i++)
	{
		if (arr[i] > arr[i + 1]) {
			int tom = arr[i];
			arr[i] = arr[i + 1];
			arr[i + 1] = tom;

		}

	}
}

二维数组

定义:

数据类型  数组名[常量表达式][常量表达式]

[][]

例:

int  scores[2][3]
有两个长度为3的一维数组
scores[0]第一个一维数组  scores[0][0] 第一个一维数组的第一个元素
scores[1]第二个一维数组  scores[1][0] 第二个一维数组的第一个元素

初始化:

方式一:

int arr[2][3]={{1,2,3},{2,3,4}};

方式二:

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

方式三:

int arr[4][3]={1,2,3,4,4,2,3,4,3,2,6,4};
三个一组,依次分配

方式四:

int arr[4][3]={"1",{2},{4},{3}};
未赋值的值为0;

遍历二维数组

for(int i=0;i<(sizeof(arr)/sizeof(arr[0]));++i)
{
for(int z=0;z<(sizeof(arr[i])/sizeof(arr[i][0]));++z)
{
printf("%d",arr[i][z])
}
}


字符数组与字符串

C语言中没有字符串这种数据类型,可以通过char的数组来替代;

字符串一定是一个char的数组,但char的数组不一定是字符串;

数字0(和字符‘\0’等价,ASCII中‘\0’就是0)结尾的char数组就是一个字符串,但如果字符数组没有以数字0结尾,那么就不是一个字符串,而是一个字符数组,所以字符串是一种特殊的char的数组。

例:

char arr[10] = { 'h','e','l','l','o' };
printf("%s",arr)   
arr长度为10;
打印的是hello,因为未赋值的值为0,字符串碰到0截至
printf("%c",arr)
打印的是hello     ,后边的不是空格

例:

char arr[] = { 'h','e','l','l','o' };
arr长度为5

例:

char arr[]="hello"
arr长度为6,隐藏了一个‘\0’

字符数组的输入

例一:

char arr[100];
	scanf("%s", arr);      输入
	printf("%s\n", arr);   输出

例二:

	char arr[100];
	gets(arr);    输入
	puts(arr);     输出

字符数组的追加

例:

char str1[] = "abcdef";
	char str2[] = "123456";
	char arr[100];
	int i = 0;
	while (str1[i] != '\0')
	{
		arr[i] = str1[i];
		++i;
	}
	int j = 0;
	while (str2[j] != '\0')
	{
		arr[i + j] = str2[j];
		j++;
	}
	arr[i + j] = '\0';
	
	puts(arr);
	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值