带你分分钟玩转C语言指针

带你分分钟玩转C语言指针

什么是C语言指针?

C语言的指针是一种用于存储内存地址的变量类型,它可以让我们更方便地操作内存空间。通过指针,我们可以直接访问和修改内存中的数据,这样就大大提高了程序的效率。

在C语言中,我们可以通过以下方式定义一个指针变量:

int *ptr;

其中,int * 表示定义了一个指向整型数据的指针变量,而 ptr 则是这个指针变量的名称。

如何使用C语言指针?

取得指针的值

要取得一个指针的值,可以使用 & 运算符:

int i = 10;
int *ptr = &i;

printf("%p\n", &i);   // 输出变量i的地址
printf("%p\n", ptr);  // 输出指针ptr存储的地址

输出结果:

0x7fff5fbff8dc
0x7fff5fbff8dc

上面的代码中,我们先定义了一个整型变量 i ,然后通过 & 运算符取得了变量 i 的内存地址,将其赋值给了指针变量 ptr 。最后,我们通过 printf() 函数输出这两个地址,发现它们是一样的。这说明指针变量 ptr 存储的是变量 i 的地址。

读取指针所指向的数据

要读取指针所指向的数据,可以使用 * 运算符:

int i = 10;
int *ptr = &i;

printf("%d\n", *ptr);  // 输出指针ptr所指向的数据

输出结果:

10

上面的代码中,在输出指针所指向的数据时,我们使用了 * 运算符。这个运算符的作用是解引用指针,即获得指针所指向的数据。

修改指针所指向的数据

要修改指针所指向的数据,可以直接对指针进行赋值:

int i = 10;
int *ptr = &i;

*ptr = 20;   // 修改指针ptr所指向的数据

printf("%d\n", i);   // 输出原变量i的值
printf("%d\n", *ptr);  // 输出修改后的值

输出结果:

20
20

上面的代码中,我们通过指针变量 ptr 修改了变量 i 的值。此时,原变量 i 和指针所指向的数据都被修改了。

示例说明

示例一:使用指针向函数中传递参数

下面的代码演示了如何使用指针向函数中传递参数:

#include <stdio.h>

void swap(int *a, int *b) {
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int x = 1, y = 2;
    printf("before swap: x=%d, y=%d\n", x, y);
    swap(&x, &y);  // 使用指针向函数中传递参数
    printf("after swap: x=%d, y=%d\n", x, y);
    return 0;
}

输出结果:

before swap: x=1, y=2
after swap: x=2, y=1

在这个示例中,我们定义了一个函数 swap() ,它的作用是交换两个整型变量的值。在函数中,我们使用指针来读取和修改变量的值。在 main() 函数中,我们定义了两个整型变量 xy ,并通过指针向 swap() 函数中传递了它们的地址。通过这种方式,函数可以直接对变量的值进行修改,而不需要使用返回值的方式。

示例二:使用指针动态分配内存

下面的代码演示了如何使用指针动态分配内存:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int size;
    int *arr;

    printf("Enter the size of the array: ");
    scanf("%d", &size);

    arr = (int *) malloc(size * sizeof(int));  // 使用指针动态分配内存

    if (arr == NULL) {  // 检查内存是否分配成功
        printf("Memory allocation failed.\n");
        exit(1);
    }

    for (int i = 0; i < size; i++) {  // 向数组中写入数据
        arr[i] = i + 1;
    }

    for (int i = 0; i < size; i++) {  // 从数组中读取数据并输出
        printf("%d ", arr[i]);
    }
    printf("\n");

    free(arr);  // 释放内存

    return 0;
}

在这个示例中,我们使用指针动态分配了一个整型数组的内存,并向其中写入了数据。在使用完数组之后,我们通过 free() 函数释放了它所占用的内存。

总结

本文介绍了C语言指针的基本概念和使用方法,并提供了两个示例来说明指针在实际应用中的使用。掌握指针的正确定义和使用方式,可以让我们更高效地操作内存,编写更加优秀的C语言程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:带你分分钟玩转C语言指针 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Hello world!让 grub2 引导自己的操作系统 Xos 内核

    Hello world!让 grub2 引导自己的操作系统 Xos 内核 背景 在编写操作系统或内核的过程中,我们需要选择一个好的引导方式。grub2 是一个被广泛使用的引导程序,能够方便地引导多种操作系统,包括自己的操作系统。 步骤 准备工作 在开始之前,需要先安装 grub2 引导程序以及将编译好的 Xos 内核准备好。在 Ubuntu 上可以使用以下命…

    其他 2023年3月28日
    00
  • 魔兽世界8.0法师什么特质好 8.0法师最佳属性与特质推荐

    魔兽世界8.0法师最佳属性与特质推荐 作为魔兽世界里非常重要的职业之一,法师在8.0版本中的属性与特质选择至关重要。下面就为大家介绍8.0版本法师的最佳属性与特质推荐。 1. 属性选择 在8.0版本中,法师最重要的三个属性分别为智力、暴击和急速。 智力是法师最主要的属性,它能够提升法术的伤害和治疗效果。暴击是法师的爆发属性,它能够提高法术的暴击率和暴击伤害。…

    other 2023年6月27日
    00
  • android6.0运行时权限完美封装方法

    为了在Android 6.0及以上版本上获得一些敏感权限,如读取设备存储器、拍照、录音等,需要使用运行时权限。本文将介绍如何完美封装运行时权限,使其在应用中更加方便快捷。 1. 权限获取流程 首先,我们需要确定权限获取的流程: 先判断权限是否已经被授予: 如果有授予了,直接执行后续操作。 如果没有授予,执行下一步。 弹出权限请求框,请求用户授权。 用户授权或…

    other 2023年6月25日
    00
  • Spring Bean的生命周期详细介绍

    Spring Bean的生命周期可分为以下7个阶段: 实例化Bean对象:在Spring IoC容器中,当应用程序需要使用Bean对象时,容器根据配置文件中的Bean定义信息,创建Bean对象。这个过程就是实例化Bean对象。 设置Bean属性(依赖注入):在Bean对象实例化之后,Spring IoC容器会将配置文件中Bean定义的属性值通过Setter方…

    other 2023年6月27日
    00
  • 使用telnet连接redis

    使用telnet连接Redis的完整攻略 Redis是一款常用的内存数据库,可以使用telnet连接Redis进行交互操作。本文将介绍使用telnet连接Redis的完整攻略,包括两示例说明。 步骤一:安装Redis 在使用telnet连接Redis之前,需要先安装Redis。可以使用以下命令在Ubuntu系统中装Redis: sudo apt-get up…

    other 2023年5月9日
    00
  • Jmeter的接口测试详细步骤并实现业务闭环

    当然!下面是关于\”JMeter的接口测试详细步骤并实现业务闭环\”的完整攻略,包含两个示例说明。 … … … … 示例1:发送HTTP请求 打开JMeter,创建一个新的测试计划。 添加一个线程组(Thread Group)来模拟并发用户。 在线程组下添加一个HTTP请求(HTTP Request)。 在HTTP请求中设置请求的URL、方法…

    other 2023年8月20日
    00
  • C++子类父类成员函数的覆盖和隐藏实例详解

    C++子类父类成员函数的覆盖和隐藏 覆盖(Override) 当子类定义了与父类相同名称、参数列表和返回类型的成员函数时,子类的成员函数会覆盖父类的同名函数,称之为覆盖。 实现方式是使用 override 关键字表明该函数是对基类函数的重写,子类中的该函数将取代基类中的同名函数。如果子类中未找到需要重写的函数,编译器会给出错误提示。 假设有一个基类 Shap…

    other 2023年6月26日
    00
  • 新手入门必看:InDesign最常见问题22例整理大全

    新手入门必看:InDesign最常见问题22例整理大全攻略 1. 什么是InDesign? InDesign是一款由Adobe开发的专业排版软件,广泛用于制作印刷品、电子出版物和交互式文档。 2. 如何创建新文档? 要创建新文档,请按照以下步骤操作:- 打开InDesign软件。- 在菜单栏中选择“文件”>“新建”>“文档”。- 在弹出的对话框中…

    other 2023年8月5日
    00
合作推广
合作推广
分享本页
返回顶部