首页 > 其他分享 >c语言中的地址与指针的概念,及变量的指针和指向变量的指针变量

c语言中的地址与指针的概念,及变量的指针和指向变量的指针变量

时间:2024-08-02 19:25:03浏览次数:14  
标签:变量 指向 int 地址 printf 指针

C 语言中的地址、指针、以及变量的指针与指向变量的指针变量。

1. 地址(Address)

在 C 语言中,每个变量在内存中都有一个唯一的内存地址。这个地址是变量存储的位置的标识符。可以通过 & 运算符来获取一个变量的地址。
#include <stdio.h>

int main() {
    int x = 10;
    printf("Value of x: %d\n", x);           // 输出 x 的值
    printf("Address of x: %p\n", (void*)&x); // 输出 x 的地址

    return 0;
}

- x: 变量 x 的值是 10。
- &x: & 运算符获取变量 x 的内存地址。%p 格式说明符用于输出指针(地址),并且通常需要将地址强制转换为 void* 类型。

2. 指针(Pointer)

指针是一个特殊的变量,用于存储其他变量的内存地址。指针的类型决定了它指向的数据类型。使用指针可以间接地访问和操作内存中的数据。

定义指针:
int *p;  // 声明一个指向整数的指针

初始化指针:
int x = 10;
int *p = &x; // p 存储 x 的地址

- int *p: 声明一个指向整数的指针。
- int *p = &x: 将 p 初始化为 x 的地址。

解引用指针:
int value = *p; // 获取 p 指向的值,即 x 的

 3. 变量的指针(Pointer to a Variable)

变量的指针是指向某个变量的指针。通过指针,我们可以访问和修改变量的值。指针可以用来访问动态分配的内存、数组元素、以及其他类型的内存位置。
#include <stdio.h>

int main() {
    int x = 10;
    int *p = &x; // p 是一个指针,指向 x 的地址

    printf("Value of x: %d\n", x);           // 输出 x 的值,结果是 10
    printf("Address of x: %p\n", (void*)&x); // 输出 x 的地址

    printf("Value pointed to by p: %d\n", *p); // 使用指针 p 输出 x 的值,结果是 10
    printf("Address stored in p: %p\n", (void*)p); // 输出 p 存储的地址(即 x 的地址)

    return 0;
}

4. 指向变量的指针变量(Pointer Variable Pointing to a Variable)

指向变量的指针变量就是指针本身,它存储了另一个变量的地址。可以通过指针变量来修改指向的变量的值。
#include <stdio.h>

int main() {
    int x = 10;
    int *p = &x; // p 是一个指针变量,存储了 x 的地址

    printf("Value before increment: %d\n", *p); // 输出 x 的值,即 10
    (*p)++; // 通过指针 p 修改 x 的值,将 x 的值递增 1
    printf("Value after increment: %d\n", *p);  // 输出修改后的 x 的值,即 11

    return 0;
}

5. 操作指针的示例

后置递增 *p++:
- 先解引用 p,得到 p 指向的值,然后递增指针 p,使其指向下一个元素。

#include <stdio.h>

int main() {
    int arr[] = {10, 20, 30};
    int *p = arr; // p 指向数组的第一个元素

    printf("Value: %d\n", *p++);  // 输出 10,p 移动到 arr[1]
    printf("Next value: %d\n", *p);  // 输出 20

    return 0;
}

前置递增 ++*p:
- 先解引用 p,得到 p 指向的值,然后将这个值递增 1,最后将递增后的值存储回 p 指向的内存位置。

#include <stdio.h>

int main() {
    int arr[] = {10, 20, 30};
    int *p = arr; // p 指向数组的第一个元素

    printf("Value before increment: %d\n", *p); // 输出 10
    ++*p; // 将 p 指向的值递增 1,变为 11
    printf("Value after increment: %d\n", *p);  // 输出 11

    return 0;
}

总结

- 地址是内存中变量的位置,可以通过 & 运算符获得。
- 指针是存储地址的变量,类型决定了它指向的变量类型。
- 变量的指针是指向某个变量的指针,通过它可以访问和修改变量的值。
- 指向变量的指针变量:即是指针本身,它存储其他变量的地址,并可以用来修改变量的值。

标签:变量,指向,int,地址,printf,指针
From: https://blog.csdn.net/lexc_/article/details/140775514

相关文章

  • c语言结构体的概述,定义结构体变量类型的方法,结构体变量的引用,结构体变量的初始化,结构
    1.C语言结构体的概述在C语言中,结构体(struct)是一种复合数据类型,用于将不同类型的数据组合在一起。它可以包含基本数据类型(如int、float、char等)以及其他结构体。结构体非常适合表示具有多种属性的复杂数据,如学生信息(包含姓名、年龄、成绩等)或坐标点(包含x和y坐标)。结构......
  • java如何避免NullPointerException(空指针异常,NPE)
    本文将简单的介绍nep以及如何避免npe1.npe简介空指针异常(NullPointerException)意思是指java中的异常类。当应用程序试图在需要对象的地方使用null时,抛出该异常。这种情况包括:调用null对象的实例方法。访问或修改null对象的字段。将null作为一个数组,获得其长度......
  • 嵌入式控制器(STM32)->栈指针累寄存器
    全局变量和局部变量从存储角度理解全局变量具有固定的地址,每次读写都是一个地址,而且它的存储区域从使用到使用结束一直存在局部变量再RAM中的地址不固定,采用先进后出的RAM区域,称为栈区寄存器分为通用寄存器(R0-R12)和特殊寄存器(R13-R15)ARM基本指令系统数据传送,数据操作,跳......
  • 大话C语言:第34篇 指针与函数的关系
    1指针作为函数的参数指针作为函数的参数,语法格式:返回数据类型函数名(数据类型*指针变量1,...,数据类型*指针变量1)注意,指针变量的数据类型可以为任何数据类型,包括基本数类型和自定义数据类型代码示例:voidswap(int*ptr1,int*ptr2){//提前保存ptr1指向对象......
  • wincc v8 连接opc ua 变量失败处理
     kepserverex作为opc服务器.wincc更改计算机名称后opcua变量连接不上.需要重新安装证书.打开证书管理器WinCCCertificateManager"C:\ProgramFiles(x86)\Siemens\WinCC\bin\Siemens.CertManagerWinApp.exe"组态里面添加设备,当前计算机名,添加证书再右键安装所有证书.......
  • 【C++】学习笔记——智能指针
    文章目录二十一、智能指针1.内存泄漏2.智能指针的使用及原理RAII智能指针的原理auto_ptrunique_ptrshared_ptrshared_ptr的循环引用weak_ptr删除器未完待续二十一、智能指针1.内存泄漏在上一章的异常中,我们了解到如果出现了异常,会中断执行流,跳转到catch处。但......
  • {Python} 有没有办法从函数中“提取”返回值变量并在其他地方使用它,而不调用原始函数?
    第一次在这里发帖。对python来说相对较新,我正在开发一个程序,它基本上是一个随机故事生成器,用于学习语言、发展技能并添加到我的投资组合中。我有一个主文件(最初启动该程序)、一个简介文件(对于介绍部分,获取用户名以及我试图“提取”user_name变量的位置),一个函数文件,其中包......
  • 变量
    变量变量是编程中的基本概念之一,它用于存储数据值,这些数据可以是数字、字符、字符串或其他类型的数据。以下是变量的一些关键特性:命名:每个变量都有一个名称,也称为标识符,用于在程序中引用它。数据类型:变量必须声明为特定的数据类型,这决定了它可以存储的数据类型和范围。例如......
  • vue生成初始化名字相近的变量并放到数组中
    项目上有一个需求,页面上有50、60个数据变量,是依次排序递增的变量,中间有个别变量用不到,不想把这些变量直接定义在data(){}内。直接上代码1.在mounted(){},大括号内定义并初始化变量1this.yx_1hddj_arr=[];2this.yx_2hddj_arr=[];3this.yx_3hddj_arr......
  • 变量及标识符
    变量变量的概念内存中的一个存储区域该区域的数据可以在同一类型范围内不断变化变量是程序中最基本的存储单元。包含变量类型、变量名和存储的值变量的作用:用于在内存中保存数据使用变量注意:Java中每个变量必须先声明,后使用使用变量名来访问这块区域的数据变量的作用域:......