C语言 指针

  • Post category:C

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 语言指针的使用攻略及示例。注意,指针的使用需要遵循一定的规范和技巧,并有很多潜在的陷阱需要小心。在实际的编程中应该多多练习,才能更深刻地理解和掌握。