c语言指针

本文解释了C语言中内存地址的概念,指针如何存储和引用内存地址,以及如何通过取值地址运算符(&)获取变量的地址。通过实例展示了如何使用指针访问和修改变量的值,强调了取值地址运算符只适用于变量,不能用于表达式或常量。
摘要由CSDN通过智能技术生成

int n; // 声明一个整数变量
int *p; // 声明一个整数指针
p = &n; // 将变量n的内存地址赋给指针p
 

在这个例子中,n 是一个整数变量,它在内存中有一个地址。p 是一个指针,它可以用来引用 n 的内存地址。&n 表示 n 变量的内存地址,而 *p 表示指针 p 所指向的内存地址中的值。

总结来说,内存空间是存储数据和指令的整个区域,而内存地址是用于定位这个区域内特定数据的位置标识符。指针变量可以存储内存地址,并允许我们通过解引用(dereferencing)操作来访问这些地址中的数据。

在C语言中,`n` 的地址通常指的是 `n` 变量在内存中的位置,这个位置由一个唯一的内存地址标识。当我们说 `n` 的地址时,我们通常是指这个内存地址。在代码片段中:


#include<stdio.h>
void main()
{
    int*p,n;
    n=3;
    p=&n;
    printf("%d\n",p);
    printf("%d",*p);
}

`printf("%d\n",p);` 这行代码会输出指针 `p` 的值,即 `n` 变量的内存地址。
`p` 是一个指向 `int` 类型变量的指针,,通过 `p = &n;` 这行代码,我们将 `n` 变量的地址赋给了指针 `p`,这意味着 `p` 现在指向了 `n` 变量在内存中的位置。所以 `printf("%d\n",p);` 会打印出指针 `p` 所指向的内存地址。这个地址是 `n` 变量的首地址,即 `n` 变量在内存中的位置。

内存地址通常可以被视为一个首地址,从这个地址开始,连续的内存单元被分配给变量。对于 `int` 类型的变量,通常占用4个字节的内存空间。因此,如果我们知道一个 `int` 类型变量的地址,我们就可以通过加上或减去相应的字节数来访问它前面的或后面的内存单元。
在这个例子中,`n` 的地址(或者说是首地址)是 `p` 指向的地址。当我们解引用指针 `p`(即使用 `*p`),我们可以访问 `n` 变量所占用的内存单元,并读取或修改其值。
所以,当我们说 `n` 的地址时,我们是在谈论 `n` 变量在内存中的存储位置,这个位置可以用一个内存地址来表示。这个地址既是首地址,也是该变量内存空间的开头。

在C语言中,取值地址运算符 `&` 用于获取一个变量或对象的内存地址。当你对一个变量使用取值地址运算符时,你得到的是该变量在内存中的存储位置。


例如,如果你有一个 `int` 类型的变量 `n`,你可以使用 `&n` 来获取变量 `n` 的内存地址。这个地址可以被传递给一个指针变量,从而允许你通过指针访问或修改变量 `n` 的值。
下面是一个简单的例子:

#include <stdio.h>
int main() {
    int n = 10;           // 声明一个整数变量n并初始化为10
    int *p;               // 声明一个指向整数的指针变量p
    p = &n;               // 将变量n的地址赋给指针p
    printf("The address of n is %p\n", &n);  // 打印变量n的地址
    printf("The value of n is %d\n", *p);    // 通过指针p打印变量n的值
    *p = 20;              // 通过指针p修改变量n的值
    printf("The new value of n is %d\n", n); // 打印修改后的变量n的值
    return 0;
}

在这个例子中,`&n` 用于获取变量 `n` 的地址,并且这个地址被存储在指针变量 `p` 中。通过 `*p`,我们可以访问或修改 `n` 变量的值。
需要注意的是,取值地址运算符 `&` 只能用于变量,不能用于表达式或常量。尝试获取一个表达式或常量的地址将会导致未定义行为,可能会导致程序崩溃。

例如:

printf("The address of 10 is %p\n", &10); // 这是未定义行为

在上面的例子中,尝试获取常量 `10` 的地址将会导致程序行为不可预测。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值