开启你的编程学习之旅

云课堂提供高质量的编程课程,从入门到精通,助你成为技术大牛

立即开始学习

C语言程序开发

作者: 夏老师 更新: 2025-10-20 阅读: 4432 难度: 中级
学习工具

4. C语言指针和字符串

指针是C语言的精髓,字符串是字符数组的特殊形式。

指针基础

指针操作
#include <stdio.h> int main() { int num = 100; int *ptr = # // 指针指向num的地址 printf("变量num的值: %d\n", num); printf("变量num的地址: %p\n", &num); printf("指针ptr的值(存储的地址): %p\n", ptr); printf("指针ptr指向的值: %d\n", *ptr); printf("指针ptr自己的地址: %p\n", &ptr); // 通过指针修改变量值 *ptr = 200; printf("通过指针修改后,num的值: %d\n", num); // 指针运算 int arr[] = {10, 20, 30, 40, 50}; int *arrPtr = arr; // 指向数组首元素 printf("\n数组元素通过指针访问:\n"); for (int i = 0; i < 5; i++) { printf("arr[%d] = %d, *(arrPtr + %d) = %d\n", i, arr[i], i, *(arrPtr + i)); } // 指针与函数 int a = 5, b = 10; printf("\n交换前: a = %d, b = %d\n", a, b); swap(&a, &b); // 传递地址 printf("交换后: a = %d, b = %d\n", a, b); return 0; } // 通过指针交换两个变量的值 void swap(int *x, int *y) { int temp = *x; *x = *y; *y = temp; }

字符串操作

字符串处理函数
#include <stdio.h> #include <string.h> #include <ctype.h> // 自定义字符串函数声明 int myStrlen(const char *str); void myStrcpy(char *dest, const char *src); int myStrcmp(const char *str1, const char *str2); void reverseString(char *str); int main() { // 字符串初始化 char str1[] = "Hello"; char str2[20] = "World"; char str3[] = {'C', ' ', 'P', 'r', 'o', 'g', 'r', 'a', 'm', '\0'}; printf("str1: %s\n", str1); printf("str2: %s\n", str2); printf("str3: %s\n", str3); // 使用标准字符串函数 printf("\n=== 标准字符串函数 ===\n"); printf("str1长度: %zu\n", strlen(str1)); strcpy(str2, "Programming"); printf("复制后str2: %s\n", str2); strcat(str2, " Language"); printf("连接后str2: %s\n", str2); printf("str1与str2比较: %d\n", strcmp(str1, str2)); // 使用自定义字符串函数 printf("\n=== 自定义字符串函数 ===\n"); printf("str1长度(自定义): %d\n", myStrlen(str1)); char copy[20]; myStrcpy(copy, str1); printf("复制str1到copy: %s\n", copy); printf("str1与copy比较(自定义): %d\n", myStrcmp(str1, copy)); // 字符串反转 char reverseStr[] = "abcdef"; printf("\n原字符串: %s\n", reverseStr); reverseString(reverseStr); printf("反转后: %s\n", reverseStr); // 字符分类函数 printf("\n=== 字符分类函数 ===\n"); char testChar = 'A'; printf(" 是大写字母: %s\n", testChar, isupper(testChar) ? "是" : "否"); printf(" 是字母: %s\n", testChar, isalpha(testChar) ? "是" : "否"); printf(" 转小写: %c\n", testChar, tolower(testChar)); return 0; } // 自定义字符串长度函数 int myStrlen(const char *str) { int length = 0; while (str[length] != '\0') { length++; } return length; } // 自定义字符串复制函数 void myStrcpy(char *dest, const char *src) { int i = 0; while (src[i] != '\0') { dest[i] = src[i]; i++; } dest[i] = '\0'; } // 自定义字符串比较函数 int myStrcmp(const char *str1, const char *str2) { int i = 0; while (str1[i] != '\0' && str2[i] != '\0') { if (str1[i] != str2[i]) { return str1[i] - str2[i]; } i++; } return str1[i] - str2[i]; } // 字符串反转函数 void reverseString(char *str) { int length = myStrlen(str); for (int i = 0; i < length / 2; i++) { char temp = str[i]; str[i] = str[length - i - 1]; str[length - i - 1] = temp; } }
提示: 这是一个重要的概念,需要特别注意理解和掌握。
注意: 这是一个常见的错误点,请避免犯同样的错误。