c语言函数改变指针地址吗 c语言改变指针指向

C语言中函数调用,为什么交换了地址,可是所指的值还是不变那

C语言中的任何函数形参都是值传递。所谓引用传递,不过是指针的值传递而已。你的函数做的工作只是交换函数中的两个临时变量a和b的值,结果不会影响到外部的实参pa和pb。

创新互联技术团队十余年来致力于为客户提供成都网站设计、做网站、成都品牌网站建设营销型网站、搜索引擎SEO优化等服务。经过多年发展,公司拥有经验丰富的技术团队,先后服务、推广了上千余家网站,包括各类中小企业、企事单位、高校等机构单位。

C语言的函数形式参数是函数的局部变量,你把实参地址值传给形参指针,在函数中交换只在函数中起作用,影响不到主调函数中实参指针的值。

就好像说:void change(int a){ a = 100;} 就算在函数里把a修改成100,return回去之后a以前该是什么还是什么。指针也是一样,你swap的只是指针的值,而不是指针指向的值。

简单来说,p1和p2交换的是a和b的地址,原来p1是指向a的,p2指向b的,交换地址后p1指向b,p2指向b。所以输出的是*p1==b;*p2==a。

为什么c语言不能通过执行调用函数来改变实参指针变量的值

首先,这个不是指针函数 ,void *ptr(int * x,int * y ,int * z);才是指针函数。指针函数是函数,只是函数返回的是个指针(地址)。

void swap(int p1,int p2){int p;p=p1;p1=p2;p2=p;} 只是交换了值而已。。同你的那个,只是交换了pp2所代表的地址而已,真正的地址不会因此交换的。正道还是以改变实参指针变量所指变量的值 。没办法。

C所有的函数调用都是将实参的值“拷贝”给形参,所以指针也不例外。函数中改变形参指针的值改变的只是形参指针的指向,函数退出后都销声匿迹了,与实参指针无关。

c语言,指针变量中存放的地址可以改变吗?

1、不行,变量分配了地址,你要放到别的地址必须先申请才行,不能随便改。

2、变量a的地址是不能变的,当程序被加载时,操作系统会为它分配好地址,且一经分配,不能再改变!当然,每一次程序运行时,操作系统为a分配的地址可以不同。

3、一个变量在申明的时候,系统就会给它分配一块地址,这个地址是不会改变的,你可以修改这个变量的值,但是这个变量的地址你没办法修改它。也就是说,int a;的时候如果a的地址在0x0001,那么它永远在这里,无法改动。

4、变量是存放在内存中的,指针就是指向存放该变量的内存地址。p是指向整形变量的指针,&是取地址运算符,p = &i的意思就是:取i的内存地址赋给p。

5、因为指针的初始化和定义后再使用是不一样的。当像我假设的定义时就是错的,因为初始化就是要指明具体的类型。因为,指针变量表示引用所指向的对象,那么该对象必须是确定(已经指向了有内存分配的类型)的。


文章名称:c语言函数改变指针地址吗 c语言改变指针指向
文章转载:http://scjbc.cn/article/dsjiceo.html

其他资讯