指针是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;
}
}
提示: 这是一个重要的概念,需要特别注意理解和掌握。
注意: 这是一个常见的错误点,请避免犯同样的错误。