指针初入门(二)(静态内存)

请思考以下程序:

#include <stdio.h>
void f(int ** q) //q是个指针变量,无论q是什么类型的指针变量,都只占4个字节
{
	int i = 5;
	//*q等价于p  q和**q都不等价于p
	//*q = i; //error 因为*q = i; 等价于 p = i; 这样写是错误的
	*q = &i;  // p = &i;
}

int main(void)
{
	int *p;  //13行
	
	f(&p);
	printf("%d\n", *p);  //16行  本语句语法没有问题,但逻辑上有问题

	return 0;
}

1.先运行主函数,分配静态内存给P指针变量用来存放其他变量的地址

2.调用f()函数,f(int** q)形参变量是二级指针变量q存放指针变量的地址

3.输出显示*P(取p指向的值)            能实现吗?

        注意:

  1. &p是对p取地址,p本来定义成一级指针,现在再取地址&,变成二级指针。与 int** q同等身份。
  2. 在主函数中调用f(&p)传输到f(int** q)函数里面
  3. 在f(int** q)函数中,进行操作:装有'5'的变量i地址赋给 *q(*代表进行一次指向访问,从二级指针消耗一次'指向'变为了一级指针,可以用来装入内容是'5'的变量i地址
  4. 同时,*q(1级)等价于p(1级),相当于通过中间人二级指针q消耗一次指向,把&i(i的地址)赋值给了一级指针*q,再传给p,完成了p指向i的功能
  5. 最后,printf("%d \n",*p)用*p,来进行指针访问所指向的 i变量,目的是想要显示5

4.然而最后并不能实现显示5,原因如下

在主函数中执行f(&p)结束的时候,函数f()里面的静态变量i已经释放内存(操作系统不再分配给这个我们编写的程序使用);因此无权通过 *p 来访问已经释放内存的i变量的值,何谈显示。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪之康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值