指针
指针是一个可以保存另一个变量地址的变量。
int* a; // `a` 是指向 int 类型的指针
double *ptrPi; // `ptrPi` 是指向 double 类型的指针
地址解析
地址运算符 & 用于获取变量的内存地址。
#include <stdio.h>
int main() {
// 声明变量
int number = 42;
double pi = 3.14159;
char letter = 'A';
// 显示变量的地址
printf("Address of number: %p\n", &number);
printf("Address of pi: %p\n", &pi);
printf("Address of letter: %p\n", &letter);
return 0;
}
%p 格式标示符用于在 printf 中打印内存地址。
解引用
解引用运算符 * 用于访问指针指向的特定内存地址处存储的值。
例如:
int main() {
int number = 42;
double pi = 3.14159;
char letter = 'A';
int *ptrNumber = &number;
double *ptrPi = π
char *ptrLetter = &letter;
printf("Value of number: %d\n", *ptrNumber);
printf("Value of pi: %.5f\n", *ptrPi);
printf("Value of letter: %c\n", *ptrLetter);
return 0;
}
解引用运算符允许操作指针指向的内存位置处的值。在 C 中使用指针操作非常重要。
指针算术
当对进行指针算术运算时,编译器会根据指针指向的数据类型的大小计算结果地址。
#include <stdio.h>
int main() {
int numbers[] = {10, 20, 30, 40, 50};
int *ptr = numbers;
printf("Elements of the array using pointer arithmetic:\n");
for (int i = 0; i < 5; ++i) {
printf("Element %d: %d\n", i + 1, *(ptr + i));
}
int *thirdElementPtr = ptr + 2;
printf("\nAccessing the third element directly using pointer arithmetic: %d\n", *thirdElementPtr);
return 0;
}
堆内存分配
在 C 中进行堆分配需要使用诸如 malloc,calloc 或 realloc 等函数从堆中动态分配内存,并返回结果指针。
#include <stdio.h>
#include <stdlib.h>
int main() {
// 为整数动态分配内存并返回其地址的指针
int* a = (int*)malloc(sizeof(int));
if (a) { // 检查内存是否成功分配
free(a); // 手动释放它,否则会导致内存泄漏
}
return 0;
}
代码挑战
编写一个 C 程序,使用指针交换两个整数的值。
Loading...
> 此处输出代码运行结果