【C语言 3】 数组和字符串

文章详细介绍了C语言中数组的定义、声明和引用,包括完全定义和不完全定义的情况,强调了数组长度不能为变量。同时,文章阐述了字符串在数组中的存储,特别是字符串的结束标志的重要性。还提到了转义字符在字符串和字符常量中的应用。

数组和字符串

1. 数组的定义、声明、引用

1.1 数组的定义

数组是C语言中用于存放一类数据的数据类型,顾名思义数组就是很多数的组合。
形式:type(数据类型)+ 数组名 + [ ] = {数组元素}

//1.数组的定义
int main()
{
	//完全形式定义:
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//定义一个整形数组,最多放10个元素
	//不完全数组1(元素不完全):
	int a[5] = { 1,2,3 };//剩余的自动补0
	//不完全数组2(长度不完全):
	int b[] = { 0,1,2,3 };//自动确定数组长度是4

	//错误的数组定义形式
	//数组长度为变量
	int n = 5;
	int brr[n] = { 0,1,2,3,4 };
	//数组长度为常变量
	const int m = 5;
	int crr[m] = { 0,1,2,3,4 };//常变量还是一个变量,只不过变成只读性。在前面的数据结构我们也有讲解
	return 0;
}

总结:所以我们在进行数组定义时,要么是写一个完全的定义形式,要么是不完全的正确形式。数组长度不能为变量。

1.2 数组的声明

申明的作用是让其他地方也能使用这个数组。

//2.数组申明

//用extern申明
//mian.c文件
extern int arr[];
int main()
{
	printf("%d", arr[4]);
	return 0;
}
//hello.c文件
int arr[5] = { 0,1,2,3,4 };

//引用头文件申明
//mian.c文件
#include "hello.h"
int main()
{
	printf("%d", arr[4]);
	return 0;
}
//hello.c文件
#include "hello.h"
int arr[5] = { 0,1,2,3,4 };
//hello.h文件
extern int arr[5];

1.3 数组的引用

通过下标来访问,从0开始到n-1

int main()
{
	int arr[5] = { 0,1,2,3,4 };
	printf("%d\n", arr[0]);
	printf("%d\n", arr[1]);
	printf("%d\n", arr[2]);
	printf("%d\n", arr[3]);
	return 0;
}

2. 字符串

“hello bit.\n”
这种由双引号引起来的一串字符称为称字符串。字符串可以存在数组里面,只需要一个char型的数组。

2.1字符串在数组中的存储

#include <string.h>
int main()
{
	char arr[] = "hello";
	printf("%d", sizeof(arr));//sizeof是求数组长度的语句,char一个字节,应该是4个字节,为什么是5个字节呢?
	//字符串的结束标志是一个 \0 的转义字符,定义的时候被""忽略了
	//我们尝试这样定义
	//char arr[] = {'h','e','l','l','o'};
	//printf("%d", strlen(arr));//strlen是求字符串长度的,发现长度远超5,且随机,原因就是他一直找0值,找不到就继续往后找
	return 0;
}

注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串,\0在用引号括起来的时候已经隐藏起来了

  • '0’是字符0
  • '\0’是数值0
    所以字符串在内存空间中是占了n+1个单元的,字符串长度是n个
int main()
{
    char arr1[] = "bit";
    char arr2[] = {'b', 'i', 't'};
    char arr3[] = {'b', 'i', 't', '\0'};
    printf("%s\n", arr1);
    printf("%s\n", arr2);//你跟我说是字符串,但是你没有\0,那我只能一直往下面找,直到我找到\0,所以后面是随机的,而且如果打印出他的长度,那么他是不固定的。但是如果你说是数组长度,那么我会打印3,第一种会打印4,因为他还有\0。
    printf("%s\n", arr3);
    return 0;
 }

3. 转义字符

转义字符也是一种字符
? 在书写连续多个问号时使用,防止他们被解析成三字母词
’ 用于表示字符常量’
\“ 用于表示一个字符串内部的双引号
\ 用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制的数字。 如: \130 X (八进制没有8)
\xdd dd表示2个十六进制数字。 如: \x30 0 (十六进制没有16)

//5.转义字符
//例1
#include <stdio.h>
int main()
{
	printf("%c\n", '\'');
	printf("%s\n", "\"");
	return 0;
}


//例2
#include <stdio.h>
int main()
{
	printf("%d\n", strlen("abcdef"));
	// \62被解析成一个转义字符
	printf("%d\n", strlen("c:\test\628\test.c"));
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太阳予野花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值