数组和字符串是C语言中组织和管理数据的重要方式。东巴文(db-w.cn) 将带你深入理解数组与字符串,掌握数据处理的核心技能。
💡 东巴文观点:数组是相同类型数据的有序集合,字符串是以空字符结尾的字符数组,是C语言数据处理的基础。
东巴文说明:数组是一组相同类型数据的有序集合,存储在连续的内存空间中。
东巴文说明:字符串是以空字符 \0 结尾的字符数组。
东巴文数组与字符串特点:
数组特点
├── 元素类型相同
├── 内存连续
├── 下标访问
└── 长度固定
字符串特点
├── 字符数组
├── 以'\0'结尾
├── 可用双引号初始化
└── 可用字符串函数操作
#include <stdio.h>
int main() {
printf("=== 东巴文一维数组 ===\n\n");
// 声明数组
int arr1[5]; // 声明但不初始化
// 声明并初始化
int arr2[5] = {1, 2, 3, 4, 5};
// 部分初始化
int arr3[5] = {1, 2}; // 其余元素为0
// 自动推断长度
int arr4[] = {1, 2, 3, 4, 5};
// 全部初始化为0
int arr5[5] = {0};
printf("arr2: ");
for (int i = 0; i < 5; i++) {
printf("%d ", arr2[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文二维数组 ===\n\n");
// 声明
int matrix1[3][4];
// 完全初始化
int matrix2[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
// 部分初始化
int matrix3[3][4] = {
{1, 2},
{5},
{9, 10, 11}
};
// 自动推断行数
int matrix4[][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8}
};
// 打印matrix2
printf("matrix2:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
printf("%2d ", matrix2[i][j]);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文字符串创建 ===\n\n");
// 字符数组方式
char str1[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// 字符串字面量
char str2[6] = "Hello";
// 自动推断长度
char str3[] = "Hello";
// 指针方式
char *str4 = "Hello";
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
printf("str3: %s\n", str3);
printf("str4: %s\n", str4);
return 0;
}
东巴文说明:
\0 结尾\0#include <stdio.h>
#include <string.h>
int main() {
printf("=== 东巴文字符串存储 ===\n\n");
char str[] = "Hello";
printf("字符串:%s\n", str);
printf("字符串长度:%zu\n", strlen(str));
printf("数组大小:%zu 字节\n", sizeof(str));
printf("\n字符存储:\n");
for (int i = 0; i <= strlen(str); i++) {
printf("str[%d] = '%c' (ASCII: %d)\n", i, str[i], str[i]);
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文数组访问与遍历 ===\n\n");
int arr[5] = {10, 20, 30, 40, 50};
// 通过下标访问
printf("arr[0] = %d\n", arr[0]);
printf("arr[2] = %d\n", arr[2]);
printf("arr[4] = %d\n", arr[4]);
// 修改元素
arr[1] = 25;
printf("修改后 arr[1] = %d\n", arr[1]);
// 遍历数组
printf("\n遍历数组:\n");
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文数组内存布局 ===\n\n");
int arr[5] = {10, 20, 30, 40, 50};
printf("数组元素地址:\n");
for (int i = 0; i < 5; i++) {
printf("&arr[%d] = %p, 值 = %d\n", i, &arr[i], arr[i]);
}
printf("\n数组首地址:%p\n", arr);
printf("数组大小:%zu 字节\n", sizeof(arr));
printf("元素大小:%zu 字节\n", sizeof(arr[0]));
printf("元素个数:%zu\n", sizeof(arr) / sizeof(arr[0]));
return 0;
}
东巴文说明:
#include <stdio.h>
#include <string.h>
int main() {
printf("=== 东巴文字符串输入输出 ===\n\n");
char str[] = "东巴文欢迎您";
// printf输出
printf("printf: %s\n", str);
// puts输出(自动换行)
printf("puts: ");
puts(str);
// 逐字符输出
printf("逐字符输出: ");
for (int i = 0; str[i] != '\0'; i++) {
putchar(str[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
printf("=== 东巴文字符串长度与复制 ===\n\n");
char src[] = "东巴文";
char dest[20];
// strlen: 字符串长度
printf("字符串:%s\n", src);
printf("长度:%zu\n", strlen(src));
// strcpy: 复制字符串
strcpy(dest, src);
printf("复制后:%s\n", dest);
// strncpy: 复制指定长度
char dest2[10];
strncpy(dest2, src, 3);
dest2[3] = '\0';
printf("部分复制:%s\n", dest2);
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
printf("=== 东巴文字符串连接与比较 ===\n\n");
// 字符串连接
char str1[50] = "东巴文";
char str2[] = " 欢迎您";
strcat(str1, str2);
printf("连接后:%s\n", str1);
// 字符串比较
char s1[] = "apple";
char s2[] = "banana";
char s3[] = "apple";
printf("\nstrcmp(\"%s\", \"%s\") = %d\n", s1, s2, strcmp(s1, s2));
printf("strcmp(\"%s\", \"%s\") = %d\n", s1, s3, strcmp(s1, s3));
if (strcmp(s1, s3) == 0) {
printf("\"%s\" 和 \"%s\" 相等\n", s1, s3);
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文数组求和与平均值 ===\n\n");
int scores[] = {85, 92, 78, 90, 88};
int count = sizeof(scores) / sizeof(scores[0]);
int sum = 0;
for (int i = 0; i < count; i++) {
sum += scores[i];
}
double average = (double)sum / count;
printf("分数:");
for (int i = 0; i < count; i++) {
printf("%d ", scores[i]);
}
printf("\n");
printf("总分:%d\n", sum);
printf("平均分:%.2f\n", average);
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文数组查找最值 ===\n\n");
int arr[] = {23, 45, 12, 67, 34, 89, 56};
int count = sizeof(arr) / sizeof(arr[0]);
int max = arr[0];
int min = arr[0];
int maxIndex = 0;
int minIndex = 0;
for (int i = 1; i < count; i++) {
if (arr[i] > max) {
max = arr[i];
maxIndex = i;
}
if (arr[i] < min) {
min = arr[i];
minIndex = i;
}
}
printf("数组:");
for (int i = 0; i < count; i++) {
printf("%d ", arr[i]);
}
printf("\n");
printf("最大值:arr[%d] = %d\n", maxIndex, max);
printf("最小值:arr[%d] = %d\n", minIndex, min);
return 0;
}
#include <stdio.h>
// 冒泡排序
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
printf("=== 东巴文数组排序 ===\n\n");
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int count = sizeof(arr) / sizeof(arr[0]);
printf("排序前:");
for (int i = 0; i < count; i++) {
printf("%d ", arr[i]);
}
printf("\n");
bubbleSort(arr, count);
printf("排序后:");
for (int i = 0; i < count; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
printf("=== 东巴文字符串查找 ===\n\n");
char str[] = "东巴文欢迎您";
char ch = '文';
char *substr = "欢迎";
// strchr: 查找字符
char *pos1 = strchr(str, ch);
if (pos1 != NULL) {
printf("strchr: 找到'%c'在位置 %ld\n", ch, pos1 - str);
}
// strstr: 查找子字符串
char *pos2 = strstr(str, substr);
if (pos2 != NULL) {
printf("strstr: 找到\"%s\"在位置 %ld\n", substr, pos2 - str);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main() {
printf("=== 东巴文字符串转换 ===\n\n");
// 字符串转数字
char numStr[] = "12345";
int num = atoi(numStr);
printf("atoi: %d\n", num);
char floatStr[] = "3.14159";
double floatNum = atof(floatStr);
printf("atof: %.5f\n", floatNum);
// 大小写转换
char str[] = "Hello, 东巴文";
printf("\n原字符串:%s\n", str);
// 转大写
for (int i = 0; str[i] != '\0'; i++) {
str[i] = toupper(str[i]);
}
printf("转大写:%s\n", str);
// 转小写
for (int i = 0; str[i] != '\0'; i++) {
str[i] = tolower(str[i]);
}
printf("转小写:%s\n", str);
return 0;
}
#include <stdio.h>
// 数组作为参数
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 修改数组元素
void doubleArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
arr[i] *= 2;
}
}
int main() {
printf("=== 东巴文数组与函数 ===\n\n");
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
printf("原数组:");
printArray(arr, size);
doubleArray(arr, size);
printf("翻倍后:");
printArray(arr, size);
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文数组越界检查 ===\n\n");
int arr[5] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
// ✅ 正确:检查边界
int index = 3;
if (index >= 0 && index < size) {
printf("arr[%d] = %d\n", index, arr[index]);
} else {
printf("索引越界\n");
}
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
printf("=== 东巴文字符串空间管理 ===\n\n");
// ✅ 正确:确保有足够空间
char dest[20];
char src[] = "东巴文";
strcpy(dest, src);
printf("复制成功:%s\n", dest);
// ✅ 推荐:使用strncpy限制长度
char dest2[10];
strncpy(dest2, src, sizeof(dest2) - 1);
dest2[sizeof(dest2) - 1] = '\0';
printf("安全复制:%s\n", dest2);
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文初始化数组与字符串 ===\n\n");
// ✅ 推荐:初始化数组为0
int arr[5] = {0};
// ✅ 推荐:初始化字符串为空
char str[50] = "";
printf("数组首元素:%d\n", arr[0]);
printf("字符串:\"%s\"\n", str);
return 0;
}
完成本章学习后,请确认:
掌握数组与字符串后,你可以继续学习:
如果遇到问题,欢迎访问 东巴文(db-w.cn) 获取帮助!
东巴文(db-w.cn) - 让编程学习更简单
📦 东巴文数组与字符串提示:数组和字符串是C语言数据处理的基础,掌握它们是开发实用程序的关键。在 db-w.cn,我们会通过大量实例帮你掌握数组与字符串的使用!