指针是C语言中一个重要的概念,它允许程序员直接操作内存地址。
1、基本指针声明与赋值
#include <stdio.h>
int main() {
int x = 10;
int *p = &x; // p是指向x的指针
printf("%d\n", *p); // 输出x的值,即10
return 0;
}
2、指针与数组
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int *p = arr; // p指向数组的第一个元素
printf("%d\n", *(p + 2)); // 输出数组的第三个元素,即3
return 0;
}
3、指针与函数参数
#include <stdio.h>
void printValue(int *ptr) {
printf("%d\n", *ptr);
}
int main() {
int x = 20;
printValue(&x); // 输出20
return 0;
}
4、指针与动态内存分配
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p = (int *)malloc(sizeof(int)); // 动态分配内存
*p = 100;
printf("%d\n", *p); // 输出100
free(p); // 释放内存
return 0;
}
5、指针与结构体
#include <stdio.h>
typedef struct {
int x;
int y;
} Point;
int main() {
Point p1 = {1, 2};
Point *ptr = &p1;
printf("(%d, %d)\n", ptr->x, ptr->y); // 输出(1, 2)
return 0;
}
6、指针数组
#include <stdio.h>
int main() {
int arr[] = {10, 20, 30, 40, 50};
int *ptrs[5];
for (int i = 0; i < 5; i++) {
ptrs[i] = &arr[i];
}
printf("%d\n", *(ptrs[2])); // 输出30
return 0;
}
7、函数指针
#include <stdio.h>
void func1() {
printf("Function 1\n");
}
void func2() {
printf("Function 2\n");
}
typedef void (*FuncPtr)();
int main() {
FuncPtr ptrs[2] = {func1, func2};
ptrs[0](); // 输出Function 1
ptrs[1](); // 输出Function 2
return 0;
}
8、指针与字符串
#include <stdio.h>
int main() {
char str[] = "Hello, World!";
char *p = str;
printf("%s\n", p); // 输出Hello, World!
return 0;
}
9、多级指针
#include <stdio.h>
int main() {
int x = 10;
int *p = &x;
int **pp = &p;
printf("%d\n", ***pp); // 输出10
return 0;
}
10、指针与回调函数
#include <stdio.h>
void printInt(int *val) {
printf("%d\n", *val);
}
void process(int *val, void (*callback)(int *)) {
*val *= 2;
callback(val);
}
int main() {
int x = 5;
process(&x, printInt); // 输出10
return 0;
}