C 指向的值不变
该计划:C 指向的值不变,c,arrays,C,Arrays,该计划: #include <stdio.h> int main() { int ara[]={1,2,3}; int *pr=ara; printf("*pr |%d|\n",*pr); ara[0]=2; printf("*pr |%d|\n",*pr); return 0; } 在上面的代码中,*pr的值在更改数组的第一个元素后从1更改为2 但在这个例子中: #include <stdio.h> int main(
#include <stdio.h>
int main()
{
int ara[]={1,2,3};
int *pr=ara;
printf("*pr |%d|\n",*pr);
ara[0]=2;
printf("*pr |%d|\n",*pr);
return 0;
}
在上面的代码中,*pr
的值在更改数组的第一个元素后从1
更改为2
但在这个例子中:
#include <stdio.h>
int main()
{
int ara[]={1,2,3};
int x=ara[0];//value of x is now 1
ara[0]=2;
printf("x=%d\n",x);//value of x still remains 1
return 0;
}
#包括
int main()
{
int ara[]={1,2,3};
int x=ara[0];//x的值现在是1
ara[0]=2;
printf(“x=%d\n”,x);//x的值仍然为1
返回0;
}
x的值没有改变
为什么?那么,有什么问题,它仍然是一个,请阅读代码中的注释,了解它是如何工作的
#include <stdio.h>
int main()
{
int ara[]={1,2,3};
int x=ara[0]; //**value of x is now 1 which it is taking from arr[0]**
ara[0]=2; // **value of arr[0] is being changed(but not x is modified here,it still holds the same value i.e 1)**
printf("x=%d\n",x);//value of x still remains 1
return 0;
}
#包括
int main()
{
int ara[]={1,2,3};
int x=ara[0];//**x的值现在是1,它从arr[0]中获取**
ara[0]=2;//**正在更改arr[0]的值(但此处没有修改x,它仍然保持相同的值,即1)**
printf(“x=%d\n”,x);//x的值仍然为1
返回0;
}
它们都是不同的,并且分配了不同的内存位置。因此,它仍然是一个,请阅读代码中的注释以了解其工作方式。
#include <stdio.h>
int main()
{
int ara[]={1,2,3};
int x=ara[0]; //**value of x is now 1 which it is taking from arr[0]**
ara[0]=2; // **value of arr[0] is being changed(but not x is modified here,it still holds the same value i.e 1)**
printf("x=%d\n",x);//value of x still remains 1
return 0;
}
#包括
int main()
{
int ara[]={1,2,3};
int x=ara[0];//**x的值现在是1,它从arr[0]中获取**
ara[0]=2;//**正在更改arr[0]的值(但此处没有修改x,它仍然保持相同的值,即1)**
printf(“x=%d\n”,x);//x的值仍然为1
返回0;
}
它们都不同,分配了不同的内存位置。在第一种情况下,您可以通过指针访问原始对象。在第二种情况下,您复制
ara[0]
并将其存储到x
。由于它是一个副本,ara[0]
的修改不会改变x
在第一种情况下,您通过指针访问原始对象。在第二种情况下,您复制ara[0]
并将其存储到x
。由于它是一个副本,因此执行此操作时,ara[0]
的修改不会更改x
int x=ara[0];
您可以告诉编译器:
- 您想创建一个新的独立变量,名为
,类型为x
,并且int
- 该变量的初始值必须从
复制ara[0]
x
和ara[0]
之间就没有关系了:改变其中一个不会改变另一个
使用指针时,也会创建一个自变量,但这次该变量会在内存中保留其他值的地址(除了保留指针的值)。当你谈论指针时,你要区分两个值——指针的值和指针指向的值。在第一个示例中,ptr
保留原始值,但它指向的值会更改。执行此操作时
int x=ara[0];
您可以告诉编译器:
- 您想创建一个新的独立变量,名为
,类型为x
,并且int
- 该变量的初始值必须从
复制ara[0]
x
和ara[0]
之间就没有关系了:改变其中一个不会改变另一个
使用指针时,也会创建一个自变量,但这次该变量会在内存中保留其他值的地址(除了保留指针的值)。当你谈论指针时,你要区分两个值——指针的值和指针指向的值。在第一个示例中,
ptr
保留原始值,但它指向的值已更改。x
类型为int
,而ptr
类型为int*
。因此x
和ara[0]
是存储在内存中两个不同空间中的两个不同变量
执行
x=ara[0]
将x
的值更改为与ara[0]
相同,但更改此值不会影响其他值。x
类型为int
,而ptr
类型为int*
。因此x
和ara[0]
是存储在内存中两个不同空间中的两个不同变量
执行
x=ara[0]
将x
的值更改为与ara[0]
相同,但更改此值不会影响另一个。因为变量int x
是内存中整数位置的符号。此位置与int ara[]
的内存位置分开
应该使用指针x
指向数组的第一个元素位置;这将反映阵列中的修改。在变量名之前使用asterix使其成为指针。这就是为什么int*pr
反映了这些变化
顺便说一句,数组变量(
ara
)的名称是数组中第一个元素的地址;实际上是ara[0]
的地址。行int*pr=ara
使变量指向数组中的第一个元素内存位置。因为变量int x
是内存中整数位置的符号。此位置与int ara[]
的内存位置分开
应该使用指针x
指向数组的第一个元素位置;这将反映阵列中的修改。在变量名之前使用asterix使其成为指针。这就是为什么int*pr
反映了这些变化
顺便说一句,数组变量(ara
)的名称是数组中第一个元素的地址;实际上是ara[0]
的地址。行int*pr=ara
使变量指向数组中的第一个元素内存位置。对于第一种情况
int ara[]={1,2,3};
int *pr=ara;
这里的指针pr
指向数组ara的第一个元素的地址<