指针是C语言中最强大的特性之一,允许直接访问和操作内存。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 函数声明
void swap(int *a, int *b);
void printArray(int *arr, int size);
int* createArray(int size);
void freeArray(int *arr);
void sortArray(int *arr, int size);
int* findMax(int *arr, int size);
void reverseString(char *str);
void printMatrix(int **matrix, int rows, int cols);
int** createMatrix(int rows, int cols);
void freeMatrix(int **matrix, int rows);
// 函数指针类型定义
typedef int (*CompareFunc)(int, int);
int main() {
// 基本指针操作
printf("基本指针操作示例:\n");
int num = 42;
int *ptr = #
printf("num的值:%d\n", num);
printf("ptr指向的值:%d\n", *ptr);
printf("num的地址:%p\n", (void*)&num);
printf("ptr存储的地址:%p\n", (void*)ptr);
// 指针运算
printf("\n指针运算示例:\n");
int arr[] = {1, 2, 3, 4, 5};
int *p = arr;
printf("数组元素:");
for (int i = 0; i < 5; i++) {
printf("%d ", *(p + i));
}
printf("\n");
// 指针和数组
printf("\n指针和数组示例:\n");
printArray(arr, 5);
// 指针作为函数参数
printf("\n指针作为函数参数示例:\n");
int a = 5, b = 10;
printf("交换前:a = %d, b = %d\n", a, b);
swap(&a, &b);
printf("交换后:a = %d, b = %d\n", a, b);
// 动态内存分配
printf("\n动态内存分配示例:\n");
int *dynamicArr = createArray(5);
if (dynamicArr != NULL) {
for (int i = 0; i < 5; i++) {
dynamicArr[i] = i + 1;
}
printf("动态数组:");
printArray(dynamicArr, 5);
freeArray(dynamicArr);
}
// 多级指针
printf("\n多级指针示例:\n");
int **matrix = createMatrix(3, 3);
if (matrix != NULL) {
// 初始化矩阵
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
matrix[i][j] = i * 3 + j + 1;
}
}
printf("3x3矩阵:\n");
printMatrix(matrix, 3, 3);
freeMatrix(matrix, 3);
}
// 函数指针
printf("\n函数指针示例:\n");
CompareFunc compare = (CompareFunc)strcmp;
int result = compare(5, 3);
printf("比较结果:%d\n", result);
// 字符串操作
printf("\n字符串操作示例:\n");
char str[] = "Hello, World!";
printf("原始字符串:%s\n", str);
reverseString(str);
printf("反转后字符串:%s\n", str);
// 指针数组
printf("\n指针数组示例:\n");
char *strings[] = {"Hello", "World", "C", "Programming"};
int numStrings = sizeof(strings) / sizeof(strings[0]);
printf("字符串数组:\n");
for (int i = 0; i < numStrings; i++) {
printf("%s\n", strings[i]);
}
// 常量指针
printf("\n常量指针示例:\n");
const int constant = 100;
const int *constPtr = &constant;
printf("常量值:%d\n", *constPtr);
// void指针
printf("\nvoid指针示例:\n");
void *voidPtr = #
printf("void指针指向的值:%d\n", *(int*)voidPtr);
return 0;
}
// 函数定义
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void printArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int* createArray(int size) {
return (int*)malloc(size * sizeof(int));
}
void freeArray(int *arr) {
free(arr);
}
void sortArray(int *arr, int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(&arr[j], &arr[j + 1]);
}
}
}
}
int* findMax(int *arr, int size) {
if (size <= 0) return NULL;
int *max = &arr[0];
for (int i = 1; i < size; i++) {
if (arr[i] > *max) {
max = &arr[i];
}
}
return max;
}
void reverseString(char *str) {
int length = strlen(str);
for (int i = 0; i < length / 2; i++) {
char temp = str[i];
str[i] = str[length - i - 1];
str[length - i - 1] = temp;
}
}
void printMatrix(int **matrix, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%3d ", matrix[i][j]);
}
printf("\n");
}
}
int** createMatrix(int rows, int cols) {
int **matrix = (int**)malloc(rows * sizeof(int*));
if (matrix == NULL) return NULL;
for (int i = 0; i < rows; i++) {
matrix[i] = (int*)malloc(cols * sizeof(int));
if (matrix[i] == NULL) {
freeMatrix(matrix, i);
return NULL;
}
}
return matrix;
}
void freeMatrix(int **matrix, int rows) {
for (int i = 0; i < rows; i++) {
free(matrix[i]);
}
free(matrix);
}