程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了int 在 C 中是可变的。使用指针改变可变对象的值的目的是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决int 在 C 中是可变的。使用指针改变可变对象的值的目的是什么??

开发过程中遇到int 在 C 中是可变的。使用指针改变可变对象的值的目的是什么?的问题如何解决?下面主要结合日常开发的经验,给出你关于int 在 C 中是可变的。使用指针改变可变对象的值的目的是什么?的解决方法建议,希望对你解决int 在 C 中是可变的。使用指针改变可变对象的值的目的是什么?有所启发或帮助;

谁能解释一下这两者的区别?

#include <stdio.h>
voID main() {

int a = 10;
int *p = &a;
*p  = 11;  

}

#include <stdio.h>
voID main() {
int a = 10;
a = 11;
}

解决方法

对于初学者请注意,根据C标准,没有参数的函数main应声明为

int main( void )

呈现的两个程序实际上是等价的,只是在第一个程序中,变量 a 通过指向它的指针进行了更改。

正如它在 C 标准中所写的那样 (6.2.5 Types,p.#20)

... 指针类型描述了一个对象,它的值提供了一个 对被引用类型的实体的引用。

C 中使用指针的这个属性来实现通过引用函数传递对象的机制。

虑以下程序。

#include <stdio.h>

void f( int x )
{
    x = 10;
}

void g( int *px )
{
    *px = 10;
}

int main(void) 
{
    int x = 0;
    
    printf( "Before calling f x = %d\n",x );
    f( x );
    printf( "After  calling f x = %d\n",x );

    x = 0;
    
    printf( "\nBefore calling g x = %d\n",x );
    g( &x );
    printf( "After  calling g x = %d\n",x );

    return 0;
}

程序输出为

Before calling f x = 0
After  calling f x = 0

Before calling g x = 0
After  calling g x = 10

正如您在调用函数 f 后所见,main 中声明的变量 x 的值没有改变。问题在于该函数处理 main 中声明的变量 x值的副本。即函数参数是函数的局部变量,由 main 中声明的变量 x 的值初始化。更改局部变量不会影响 main 中声明的变量 x

但是当变量 x 通过指向它的指针通过引用传递给函数 g 时,该函数能够通过以下方式更改 main 中声明的原始变量 x取消引用传递的指针。

还要记住,当您动态分配内存时,分配的对象没有名称。您只有指向动态分配对象的指针。例如

int *px = malloc( sizeof( int ) );

因此要更改分配的对象,您还需要取消对指针的引用

*px = 10;
,

在这种情况下什么都没有,但假设您要调用一个函数,如果要编辑该函数内部的 FROM 值,则需要使用指针。

#include <stdio.h>
void set_a(int *p,int val)
{
    *p = val;
}
int main()
{
    int a = 2;
    printf("a is: %d\n",a); // a is 2
    set_a(&a,5);
    printf("a is: %d\n",a); // a is 5
}

这只是一个用例。例如,在使用堆分配时,您需要使用指针。

,

这两个程序具有相同的可观察效果。

使用指针改变可变对象的值的目的是什么?

一个很好的用途是能够重用逻辑。一次写,多次使用。

例:

void foo(int *X,int *Y) {
    /* some complex calculation */
    *X = *X + *Y + 1;
    *Y = *Y + *X + 2;
}

现在,您可以使用该函数对不同变量进行“复杂”计算。您只需要正确编写和测试一次,然后就可以多次重复使用。

int main() {
    int a = 10,b = 20,c = 30,d = 40;
    foo(&a,&b);
    foo(&c,&d);
    //...
}

Demo

大佬总结

以上是大佬教程为你收集整理的int 在 C 中是可变的。使用指针改变可变对象的值的目的是什么?全部内容,希望文章能够帮你解决int 在 C 中是可变的。使用指针改变可变对象的值的目的是什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。