C语言中为什么不能用指针进行数值的交换,请高手指点
#include<stdio.h>
int main(void)
{ int *p1,*p2,*p;
int a,b;
a = 5;
b = 6;
p1 = &a;
p2 = &b;
*p = *p1;
*p1 = *p2;
*p2 = *p;
printf("%d \n%d\n",a,b);
printf("%d \n%d\n",*p1,*p2);
return 0;
}
运行提示 内存不能written
[解决办法]
你在使用*p之前还没有申请内存,却使用了*p,肯定不能written
[解决办法]
指针P没有初始化或赋值,指向内存中任意位置
[解决办法]
- C/C++ code
a = 5;b = 6;p1 = &a;p2 = &b; *p = *p1; /* 把p1指向的变量的值赋给p指向的变量,但是*p没有保存一个有效变量的内存地址,所以会出问题 */*p1 = *p2;*p2 = *p;
[解决办法]
你的p指针没有指向空间,如果执行赋值语句是会报错的
[解决办法]
你应该对p进行初始化
- C/C++ code
int *p = NULL;p = (int *)malloc(sizeof(int));
[解决办法]
没有先给*p分配一个空间
#include<stdio.h>
int main(void)
{ int *p1,*p2,*p;
int a,b,c;
p=&c;a = 5;
b = 6;
p1 = &a;
p2 = &b;
*p = *p1;
*p1 = *p2;
*p2 = *p;
printf("%d \n%d\n",a,b);
printf("%d \n%d\n",*p1,*p2);
return 0;
}
[解决办法]
[解决办法]
- C/C++ code
#include<stdio.h>int main(void){ int *p1,*p2,*p;int a,b;a = 5;b = 6;p1 = &a;p2 = &b;p=new int;//加上这行就可以了*p = *p1;*p1 = *p2;*p2 = *p;delete p;//当然严格上来讲还要加上这行printf("%d \n%d\n",a,b);printf("%d \n%d\n",*p1,*p2); return 0;}
[解决办法]
p没初始化 默认为NULL 指向0的内存是不能写入的
[解决办法]
- C/C++ code
#include "stdafx.h"#include<stdio.h>int main(void){ int *p1, *p2, *p; int a, b; a = 5; b = 6; p1 = &a; p2 = &b; p = new int; *p = *p1; *p1 = *p2; *p2 = *p; printf("%d \n%d\n",a,b); printf("%d \n%d\n",*p1,*p2); return 0;}
[解决办法]
楼上说的都是对的。p 只是指针,没有分配内存。
[解决办法]
p没有分配内存空间...
[解决办法]
学习了,这样一条语句
char *str = NULL
是不是也可以说是没有分配内存空间?
[解决办法]
[解决办法]
- C/C++ code
#include <stdio.h>#define SWAP(a,b) do ((&(a))!=(&(b)))?((a)^=(b)^=(a)^=(b)):((a)=(a)); while (0)char *p1="1" ,*p2="2" ;char c1=1 , c2=2 ;short s1=1 , s2=2 ;int i1=1 , i2=2 ;__int64 I1=1i64, I2=2i64;float f1=1.0f, f2=2.0f;double d1=1.0 , d2=2.0 ;void main() { SWAP((int)p1,(int)p2); printf("char * %5s, %5s\n",p1,p2); SWAP(c1,c2); printf("char %5d, %5d\n",c1,c2); SWAP(s1,s2); printf("short %5d, %5d\n",s1,s2); SWAP(i1,i2); printf("int %5d, %5d\n",i1,i2); SWAP(I1,I2); printf("__int64 %5I64d,%5I64d\n",I1,I2); SWAP(*(int *)&f1,*(int *)&f2);printf("float %5g, %5g\n",f1,f2); SWAP(*(__int64 *)&d1,*(__int64 *)&d2);printf("double %5lg, %5lg\n",d1,d2); SWAP(c1,c1); printf("%d\n",c1);}//char * 2, 1//char 2, 1//short 2, 1//int 2, 1//__int64 2, 1//float 2, 1//double 2, 1//2
[解决办法]
各种大神解释了。我就围观了。问题确实出现在P指针上。。。。没赋值的时候里面不知道是什么值的。所以好习惯是一开始就初始化。