㈠ c语言指针在函数调用中的问题
这说明你对指针和函数参数传递的理解不到位
这个程序里你想用函数F改变p,那么就要给F传递p的地址,p的类型是int*,那么它的的地址类型是int**,传递&p给F:
intmain()
{
voidF(int**p);//int**
int*p=NULL;
F(&p);//传地址
printf("%d",*p);
deletep;//释放
return0;
}
voidF(int**p)//int**
{
*p=newint;
**p=1;
}
或者用C++的引用:
intmain()
{
voidF(int*&p);//int*&
int*p=NULL;
F(p);//这里就是引用了
printf("%d",*p);
deletep;//释放
return0;
}
voidF(int*&p)//int*&
{
p=newint;
*p=1;
}
㈡ c语言如何在局部函数里,改变指针的指向
1、如果函数参数直接传递的是指针类型,那么在函数内改变指针指向,并不能影响函数外的指针实例。只有传入指针的指针,才能改变指针的指向。
2、函数里的形参是一般变量,在函数里面改变变量的值,不会改变主函数里实参的值。指针就是地址变量,在函数里改变地址变量的值时,不会改变主函数实参地址变量的值。只有在函数里改变指针所指向的变量的值时
主函数实参指针所指向的变量的值才会改变。
㈢ C语言函数返回指针
第二种方法,跟第一种只是参数和返回值不同而已。
初看时需要在第二种中申请内存返回出来,但是字符串为局部变量时其实也是存在静态内存中的,不会因为函数退出而失效,直接将函数内拼装的字符串返回出来也是可以的,你也可以加上static定义什么的也没问题。
㈣ C语言函数调用问题
C所有的函数调用都是将实参的值“拷贝”给形参,所以指针也不例外。函数中改变形参指针的值改变的只是形参指针的指向,函数退出后都销声匿迹了,与实参指针无关。
㈤ 计算机c语言中被调用函数的指针发生变化则主调函数中的指针是否也发生相应改变
函数是单向传递的 如果实参是指针 在被调用函数中改变的是指针 则属于单向传递 主函数中指针不变。 如果被调用函数中改变的是指针所指向的值 那么主函数中这个值 变化了 但是指针没变化
㈥ C语言中函数返回指向栈内存的指针的问题
p是指向局部变量的指针,当函数退出时,局部变量会被释放,这时,p所指向的位置就不一样是原来的数。
因为fun()函数返回的值被计算机的临时变量存放,当赋值给p的时候,p是指向临时变量的地址,所以还可以读取出100。
*p = "hello"这是常量字符串,从静态存储区分配,第一步字符串"hello"从静态存储区获取一块内存,指针变量p才指向这块静态内存,这块内存的特点是从程序开始到结束一直从在,所以可以返回。
(6)c语言函数退出时改了指针扩展阅读:
函数的返回值类型是在定义函数时指定的。return 语句中表达式的类型应与定义函数时指定的返回值类型一致。如果不一致,则以函数定义时的返回值类型为准,对 return 语句中表达式的类型自动进行转换,然后再将它返回给主调函数使用。
在调用函数时,如果需要从被调函数返回一个值供主调函数使用,那么返回值类型必须定义成非 void 型。此时被调函数中必须包含 return 语句,而且 return 后面必须要有返回值,否则就是语法错误。
㈦ 这个C语言的函数为什么修改了传入的指针却没改变main函数里的值
这就涉及型参传值。add
函数中定义参数Node*& head就可以了,你试试
㈧ C语言,指针,函数 为什么在函数中改变了指针主函数依旧不变 书上给的看不是太懂
C++可以通过异常处理的throw和catch来实现从子函数的子函数直接返回主函数,汇编语言可以用jmp指令跳转实现这个需求。C语言主要靠函数调用和return在函数之间切换,很难做到在多层调用中直接返回主函数。虽然goto语句可以无条件跳转,但是必须在同一个函数中使用。因此解决的方法也是用一个特殊的值作为需要返回的标志,然后在两层调用函数中都遇到该值就返回,但是这个方法也有两个前提:1)你的两个子函数都是由返回值的函数2)你选择的特殊值和函数正常的返回的取值不会冲突,不会引起二义性。因此建议你的这个问题还是用C++ 的异常去解决比较好。