C语言中的指针是一种特殊的数据类型,它存储了另一个变量的地址。这使得我们可以直接操作这个变量,而不需要使用它的值或通过传递多个参数来访问变量。
声明指针变量
要声明指针变量,需要在变量名前加一个星号 *。这是告诉编译器这是一个指针变量。例如:
int *p;
char *str;
这里声明了两个指针变量,一个指向 int 类型的数据,一个指向 char 类型的数据。同时,这个指针还可以用一个已存在变量的地址进行初始化:
int a = 10;
int *p = &a;
这里使用了取地址符 & 来获取变量 a 的地址,并将它赋值给指针变量 p。
通过指针访问变量
要通过指针访问变量,我们可以在指针变量前加上一个星号 *。这会使指针引用的地址中的数据被取出。例如:
int a = 10;
int *p = &a;
printf("%d\n", *p); // 输出 10
这里先声明了一个整数变量 a,并初始化为 10。然后声明了一个指向整数的指针变量 p,并将它初始化为变量 a 的地址。最后,使用星号 * 从指针中获取 a 的值并输出。
演示示例
下面是两个示例,展示了指针的使用方法。
示例一:交换变量的值
void swap(int *x, int *y)
{
int temp = *x;
*x = *y;
*y = temp;
}
int main()
{
int a = 1;
int b = 2;
printf("a=%d, b=%d\n", a, b); // 输出 a=1, b=2
swap(&a, &b);
printf("a=%d, b=%d\n", a, b); // 输出 a=2, b=1
return 0;
}
这个例子演示了如何使用指针来交换两个变量的值。 swap 函数通过引用传递来获取两个变量的地址,并使用星号 * 来交换它们的值。
示例二:动态内存分配
int main()
{
int n = 10; // 分配的元素个数
int *arr = malloc(sizeof(int) * n);
if (arr == NULL) {
printf("Memory allocation failed!\n");
return 1;
}
for (int i = 0; i < n; i++) {
arr[i] = i * 2;
}
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
free(arr); // 释放动态分配的内存
return 0;
}
这个例子演示了如何使用指针和 malloc 函数来动态分配内存。 这里使用了 malloc 函数来分配一个包含 10 个整数的数组,并检查了内存分配是否成功。 然后使用循环来初始化数组元素,并再次使用循环来打印数组元素的值。最后,未使用内存的时候,需要释放这段内存以避免内存泄漏。
以上是 C 语言指针的使用攻略及示例。注意,指针的使用需要遵循一定的规范和技巧,并有很多潜在的陷阱需要小心。在实际的编程中应该多多练习,才能更深刻地理解和掌握。