语句int *p; *p = 50;执行时,会有什么错误
时间: 2024-04-30 07:23:15 浏览: 11
这个语句会产生错误,因为指针变量p没有被初始化,指向的内存地址是未知的,对未知地址的访问是非法的,会导致程序崩溃。正确的做法是先为指针变量p分配内存空间,或者将其指向一个已经存在的变量或数组元素的地址。例如:
```
int *p = new int; // 为指针变量p分配内存空间
*p = 50; // 将50赋值给p所指向的内存地址
```
或者:
```
int n = 0;
int *p = &n; // 将p指向变量n的地址
*p = 50; // 将50赋值给n
```
相关问题
int*p const
`int* const p` 是一个指向整型数的指针常量。它声明了一个名为 `p` 的常量变量,该变量的类型为指向整型数的指针,并且不能修改 `p` 所指向的地址。但是可以通过 `p` 来修改它所指向的值,例如:
```c
int x = 10;
int y = 20;
int *const p = &x; // 定义指针常量 p,其指向 x 的地址
printf("*p = %d\n", *p); // 输出 p 所指向的值,即 x 的值为 10
*p = 30; // 修改 p 所指向的值,即修改 x 的值为 30
printf("*p = %d\n", *p); // 输出 p 所指向的值,即 x 的值为 30
p = &y; // 编译错误,不能修改 p 所指向的地址
```
输出结果为:
```
*p = 10
*p = 30
```
第二个赋值语句可以成功执行,因为它是通过 `p` 来修改它所指向的值,而不是修改 `p` 所指向的地址。第三个赋值语句会导致编译错误,因为 `p` 是一个指针常量,不能修改它所指向的地址。
int main() { void exchange(int *p1,int *p2); int a=100,b=10; int *p_a,*p_b; *p_a=a; *p_b=b; if(a>b) exchange(p_a,p_b); printf("a=%d,b=%d\n",a,b); printf("*p_a=%d,*p_b=%d\n",*p_a,*p_b); return 0; } void exchange(int *p1,int *p2) { int x; x=*p1; *p1=*p2; *p2=x; }
这是一个 C 语言程序,包含了一个 main 函数和一个名为 exchange 的函数。程序的作用是交换两个变量的值,并输出交换后的结果。
具体来说,程序中定义了两个整型变量 a 和 b,分别初始化为 100 和 10。接着定义了两个整型指针变量 p_a 和 p_b,分别指向 a 和 b 的地址。然后通过 *p_a 和 *p_b 给指针变量赋值,将它们指向的内存单元中的值设为 a 和 b 的值。
接下来,程序通过 if 语句判断 a 是否大于 b,如果成立则调用 exchange 函数,将 p_a 和 p_b 作为参数传入。在 exchange 函数中,通过指针变量 p1 和 p2 访问 a 和 b 的值,实现了交换两个变量的值的操作。
最后,程序输出交换后的结果,即 a 和 b 的值,以及指针变量 p_a 和 p_b 指向的内存单元中的值。
需要注意的是,在程序中没有为指针变量 p_a 和 p_b 分配内存空间,因此程序执行时可能会出现错误。应该在定义指针变量时,使用 malloc 或者其他分配内存空间的方式为它们分配足够的内存空间。