翁恺老师——指针变量和输入地址的变量

本文深入解析指针概念,阐述其如何存储变量地址,并通过实例演示如何使用指针访问和修改变量值。同时,文章对比了普通变量与指针变量的区别,强调了正确使用指针的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针
就是保存地址的变量

int i;
int* p=&i;//p是一个指针,*表示指针p指向的是一个int,把i的地址交给了p,p里面存放的是i的地址
int *p,q;
int* p,q;//这两行的写法意思是相同的,表示*p是一个指针,但是q只是一个普通的变量

指针变量
变量的值是内存的地址
普通的变量的值是实际的值
指针变量的值是具有实际值的变量的地址
指针和指针变量的区别
指针就是地址,地址就是指针;指针变量是一个变量,它保存了基本类型变量的地址。
如果指针变量p保存了变量a的地址,那么称作p指向了a,*p 就是变量a。
如果p是一个指针变量,*p 表示了以 p 的内容为地址的变量,就是p指向的变量。

#include<stdio.h>
 void f(int *p);
 int main()
 {
     int i=6;
    printf("&i=%p\n",&i);
    f(&i);
    return 0;
 }
void f(int *p){
    printf("p=%p\n",p);
}

访问那个地址上的变量
*是一个单目运算符,用来访问指针的值所表示的地址上的变量
可以做左值也可以做右值

int k=*p;
int *p=k+1;
#include<stdio.h>
 void f(int *p);
 void g(int k);
 int main()
 {
     int i=6;
    printf("&i=%p\n",&i);
    f(&i);
    g(i);
    return 0;
 }
void f(int *p){
    printf("p=%p\n",p);
    printf("*p=%d\n",*p);
    *p=26;
}
void g(int k){
    printf("k=%d",k);
}

输出结果

//有一个房间,里面住了一个人,叫6,这件事情突然被p知道了,p很不高兴,因为p不喜欢6。于是,p就想,我里面住着的人叫70(假设为变量i的地址),这不就是6的地址吗。于是p取来了一把万能钥匙(*),我可以打开6的门,把6赶出去,把26换进来。
为什么编译器没有报错

int i=6;
scanf("%d",i);

你本来应该写&i是一个地址,但是你现在写成了i,编译器看不出来,编译器以为你传入的就是一个地址。虽然编译没有出错,但是运行一定会出错,因为它把你传入的变量传到了地址6里面去,而不是它原本该传入的地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值