首页 > 其他分享 >指针参数和返回值指针相关问题

指针参数和返回值指针相关问题

时间:2023-01-06 15:22:36浏览次数:28  
标签:function 变量 int 修改 参数 printf 返回值 指针

指针参数和返回值指针相关问题

一、前言

我们知道普通变量作为参数传入函数是无法修改变量的值,如下示例就是典型的

void swap(int x, int y)
{
  int temp = x;
  x = y;
  y = temp;
}

解决方案:传入变量的指针(即地址),指针间接访问修改变量的值

void swap(int *x, int *y)
{
  int temp = *x;
  *x = *y;
  *y = temp;
}

那么问题来了,指针变量的值变化了吗,换句话说指针变量x,y的值变了吗?

二、指针参数和返回值指针

问题:请问如下示例中的函数function()能修改指针p_a的值吗?

示例:

#include <stdio.h>

int* function(int *x)
{
	*x = 10;
	x = NULL;
	return x;
}

int main(int argc, const char *argv[])
{
	{
		int a = 3;
		int *p_a = &a;
		printf("a=%d\n", *p_a);
		printf("p_a=%p\n", p_a);

		int *p = function(p_a);
		printf("a=%d\n", *p_a);
		printf("p_a=%p\n", p_a);
		printf("p=%p\n", p);
		
		getchar();
	}
}

运行结果:

由运行结果分析:函数function()可以通过指针p_a间接访问修改a的值,但无法修改指针p_a的值。

进一步分析:int 类型变量a 存放的是一个整数,而int * 类型变量p_a 存放的是一个地址。函数function()中形参int *x 只是实参int *p_a的拷贝,只能是形参 int *x 间接访问修改变量a的值,而无法修改实参 int *p_a的值。

若想修改实参int *p_a的值,可以传入指针变量p_a的地址(即地址的地址,两级指针),如下示例:

#include <stdio.h>

int* function(int **x)
{
	**x = 10;
	*x = NULL;
	return *x;
}

int main(int argc, const char *argv[])
{
	{
		int a = 3;
		int *p_a = &a;
		printf("a=%d\n", *p_a);
		printf("p_a=%p\n", p_a);

		int *p = function(&p_a);
		printf("p_a=%p\n", p_a);
		if (p_a != NULL)
		{
			printf("a=%d\n", *p_a);
		}
		printf("a=%d\n", a);
		printf("p=%p\n", p);
		
		getchar();
	}
}

运行结果:

标签:function,变量,int,修改,参数,printf,返回值,指针
From: https://www.cnblogs.com/caojun97/p/17030568.html

相关文章

  • idea 内存参数修改不生效问题解决 VM参数设置不生效解决
    提示:在idea的工具栏Help->EditCustomVMOptions内修改 对应参数-Xmx1024m后重启无效的再看下面的方法 问题:ieda的默认内存大小是1024M当我开多个工......
  • @RequestBody参数Map传参注意事项
    文章目录​​@requestBody参数Map传参注意事项​​​​后端接收`dto`​​@requestBody参数Map传参注意事项后端接收​​dto​​@DatapublicclassTestDto{privateString......
  • 2022.01.21.类成员函数指针
    在继承下,允许未经转换,父类的指针可以指向子类指针父类的指针可以指向子类对象:同意多种类型,提高复用性,扩展性在调用继承于同一个父类的多个子类的同一个函数时,可以使用父......
  • [JavaScript]分解url参数
    分解页面url传入参数转载:来自https://www.jianshu.com/p/6dd040f6800dfunctioninit_params(){varurl=location.search;//获取url中"?"符后的字串......
  • BitmapFactory.Options参数作用
    参数作用BitmapFactory.Options这个参数可以设置Bitmap的采样率,通过该比那图片的宽度、高度、缩放比例等,以达到减少图片的像素的目的,设置这个值可以更好的控制、显示和使用B......
  • Shell 传递参数
    我们可以在执行Shell脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1为执行脚本的第一个参数,2为执行脚本的第二个参数,以此类推……实例以下实例我们向......
  • 初识指针
    指针是什么指针和指针类型野指针指针运算指针和数组二级指针指针数组自学b站“鹏哥C语言”笔记。一、指针是什么指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑......
  • 多态参数练习
    packagecom.hspedu.poly_.polyaraneter_;publicclassTest{publicstaticvoidmain(String[]args){WorkerlaLa=newWorker("laLa",1000);......
  • 继承ModelViewSet 获取url上参数的写法
    url('^task/reqs/(?P<pk>\d+)/$',patroltaskviews.PatrolTaskViews.as_view({"get":"getTaskReqs"})),views视图classPatrolTaskViews(ModelViewSet):defget......
  • C | 指针
    1.什么是指针指针是一种变量,也称指针变量,它的值不是整数、浮点数和字符,而是内存地址。指针的值就是变量的地址,而变量有拥有一个具体值。因此,可以理解为变量直接引用了一个......