C语言能在函数里改变指针所指的对象吗?
1、如果函数参数直接传递的是指针类型,那么在函数内改变指针指向,并不能影响函数外的指针实例。只有传入指针的指针,才能改变指针的指向。
2、函数里的形参是一般变量,在函数里面改变变量的值,不会改变主函数里实参的值。指针就是地址变量,在函数里改变地址变量的值时,不会改变主函数实参地址变量的值。只有在函数里改变指针所指向的变量的值时 主函数实参指针所指向的变量的值才会改变。
看你的题目,你是想把一个指针指向的地址通过调用一个函数根据条件来修改
那你就需要把这个指针的指针传到函数里面去才可以,否则就跟你想修改一个变量的值,但把这个变量的大小传递到函数里面去一样,对外面没有任何作用
而且,因为你需要返回,所以内部的对象要用new,而不是局部变量
其实直接返回一个指针,再赋值给你需要 指针,不是更方便?
指针传递可以改变其指向地址的内容,但不能改变原指针的指向。
如果需要改变指向,需要使用指向指针的指针作为参数。
图中程序所写的代码是不能改变的。要改变指针所指对象的值,交换函数当中的语句应该这样写:
int t=*p; *p=*q;*q=t;
可以通过函数改变指针变量所指向的对象,但得用指向指针的指针。
可以将sweapt函数改成这样:void sweapt(int **a,int **b)
{
int *c=*a;
*a=*b;
*b=c;
}
同时改成这样调用:
int a=1,b=2;
int *pa=&a,*pb=&b;
sweapt(pa,pb);
C语言能不能实现改变函数调用
你不需要函数,只需要一个函数指针即可。void B();int main(){ void (*p)() = B; \/\/定义函数指针p指向函数B p(); \/\/调用p()就是调用B() return 0;}
C语言中不能在函数里面声明函数吗
从标准规范来看:C语言允许函数里声明函数,但是不建议这么写,因为不利于多文档的组织。C语言禁止函数里定义函数,但是个别编译器却没遵循标准。C语言的标准和编译器的实现并不是完全统一,为了可移植性,建议一切都按C语言标准中推荐的做法来写。我还写了个代码附带注释,程序在CFree这个IDE(内置gcc...
C语言中能否在一个自定义函数中调用另一个自定义函数?
当然可以!C语言程序的最基本的模块就是函数,该程序规定:任意函数都可以调用其它任意一个函数,包括函数本身;1、函数调用自己本身, 这种称为递归;通过递归,计算1+2+3+...+n值的代码:2、自定义函数调用其它自定义函数的例子:这个例子就是主函数调用自定义函数fun2,然后fun2调用另一个自定义...
通过传送地址值,直接在被调用函数中直接改变实参。是怎么改变的?
确实是只能单向传递(在C语言),不矛盾。如果直接传值(void swap(int a,int b)),那么无论在函数里如何修改这个值,都修改的是函数里那个变量的值,不会影响外面。如果传地址(void swap(int*a,int*b)),那么函数拿到这个地址就可以修改这个内存地址中的数据,退出函数后原来变量的内存地址中的...
最近碰到一个人说c语言的函数可以定义在主函数里,而且他的编译器居然...
函数完全可以定义在主函数里,没什么问题。这取决于对函数本身的理解。函数是一个有独立功能的小程序,函数的强大是因为它的封装性和复用性。主函数也是函数,把一个副函数写进主函数,这实际上就是往一个(主)函数中加功能而已。体现不出封装性和复用性。换言之,这样的代码可用但效率不高,阅读性...
C语言问题,这里y是全局变量,为什么void函数中改变y的值后,退出void函数...
y 没有影响。你可以尝试 修改void p(int *x,int y)改为void p(int *x,int *y),调用时使用 p(&x,&y),然后再次运行 看看结果。--- 希望我的回答对你有所帮助,C语言的指针知识点是 不好理解的,需要多琢磨,多实践才能理解和掌握。
c语言中在一个自定义函数中怎么返回两个值?
方法一:设置全局变量,这样在形参中改变全局变量,在实参中也会有效。所以可以在形参中改变多个全局变量的值,那么在实参中就相当于返回多个值。方法二:如果用数组名作为形参,那么改变数组内容,比如排序,或者进行加减运算,回到实参时依然是有效的。这样也会返回一组值。方法三:可以利用指针变量,这个...
C语言中在一个函数中可以声明另一个函数吗(不是定义)?在main里面声明也...
可以哦,我试了一下,可以在main()函数中声明函数,在main函数外定义。但是不能将一个函数声明和定义都放在某个函数中,这样会出错,还有就是在函数中声明另一个函数时,要注意必须在被调用之前声明。
C语言中swap函数是什么意思?
C语言中swap函数是自定义的函数,C标准库里没有swap函数。swap函数是用来交换的函数,经常在C语言中排序中会用到。代码示例:include<stdio.h> void swap(int *a, int *b){ int t;t = *a;a = *b;b = t;} int main(){ int a=23,b = 43;printf("输入的两个要交换的数为:%d,...
C语言中在一个函数中可以声明另一个函数吗(不是定义)?在main里面声明也...
二、以如果你声明在外部,那么从申明开始之后的代码都能使用它。三、对于函数声明,工程上一般都声明在函数外部,且声明在头文件中,以便其它文件也能用,局部函数除外。补充:1、C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器...
马华乳增: 用*或者[]运算符,比如: int a=5,*p=&a; *p=4; 就这样把a的内容变了 int a[5]={1},*p=a; p[2]=3; 这样a数组的内容也就变了
盱眙县13088211769: c语言如何在局部函数里,改变指针的指向 - ?
马华乳增: 1、如果函数参数直接传递的是指针类型,那么在函数内改变指针指向,并不能影响函数外的指针实例.只有传入指针的指针,才能改变指针的指向.2、函数里的形参是一般变量,在函数里面改变变量的值,不会改变主函数里实参的值.指针就是地址变量,在函数里改变地址变量的值时,不会改变主函数实参地址变量的值.只有在函数里改变指针所指向的变量的值时 主函数实参指针所指向的变量的值才会改变.
盱眙县13088211769: 在C语言中用const定义的变量如何修改 - ?
马华乳增: 指针 两种修改方法1: int const *pci 指针指向的对象被const成常量,指针本身是整型,可以修改,但不能修改指针指向对象的值.2: int * const pci 第二种则是这个指针本身被const成常量,指针不能修改,可修改指向的整型.参考书籍《C和指针》,最好三剑客的书都敲一遍,然后你就悟了...
盱眙县13088211769: c语言 交换指针内容 - ?
马华乳增: 一般的做法是无效的,因为产生的是一个临时指针,在函数里改变,到函数外面的时候,原来的指针没变,这样就用指针的指针 void swap(int** p,int** q) { int* temp; temp = *p; *p = *q; *q =temp; } 调用的时候就 int* p,*q; swap(&p,&q);
盱眙县13088211769: C语言指针中,不能改变指向的数据,但是可以改变它的值是什么意思? - ?
马华乳增: 这个是常量指针的说法. 意思是指向常量的指针. 比如 const char * p="abcd"; 可以做p="mnop"这样的赋值, 即可以改变p值. 但不能做*p='s'这样的赋值.即不能改变指向的数据.
盱眙县13088211769: C++,函数里形参是指针,在函数里改变指针所指向的地址时,主函数里实参地址是否会改变 - ?
马华乳增: 不会的,你可以用形参指针改变实参指针里面的数,但形参指针地址改变,实参指针是不会改变的 ,这也就是为什么C语言中讲两个数交换的时候,为什么必须写成*p的形式的原因.
盱眙县13088211769: c语言中指针函数可以改变实参的值吗 - ?
马华乳增: 在函数调用过程中分两种:按值传递与按地址传递(指针函数).按值传递,形参的改变不会影响实参 按地址传递,形参的改变当然可以改变实参的值.
盱眙县13088211769: c++中,可以将指向对象的指针作为函数参数,从而改变该指针指向的对象吗 - ?
马华乳增: 看你的题目,你是想把一个指针指向的地址通过调用一个函数根据条件来修改 那你就需要把这个指针的指针传到函数里面去才可以,否则就跟你想修改一个变量的值,但把这个变量的大小传递到函数里面去一样,对外面没有任何作用 而且,因为你需要返回,所以内部的对象要用new,而不是局部变量 其实直接返回一个指针,再赋值给你需要 指针,不是更方便?
盱眙县13088211769: C语言:如何修改指针指向字符串的单字符 - ?
马华乳增: 双引号括起来的字符串是字符串字面量(string literal),是静态对象,因此从语义上来说,指针指向它之后字符串内容自然不可修改.虽然不可被更改,但它是左值(lvalue),用&取地址还是可行的(结果是地址常量).在C中它的类型是char[...
盱眙县13088211769: C语言,全局指针变量可以被修改吗? - ?
马华乳增:有可能是被编译器的优化给去掉了.请参考下面的程序举例对比.比如: int *p; void main(void) {int a = 2;int b = 3;p = &a; /* 此赋值语句很有可能在编译之后的汇编代码中被编译器去掉了,此处可能连断点都设置不了 */p = &b...