大佬教程收集整理的这篇文章主要介绍了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,请注明来意。