读书人

C语言中为什么不能用指针进行数值的交

发布时间: 2012-04-17 15:06:33 作者: rapoo

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;
}

[解决办法]
探讨

你应该对p进行初始化
C/C++ code
int *p = NULL;
p = (int *)malloc(sizeof(int));

[解决办法]
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
是不是也可以说是没有分配内存空间?
[解决办法]
探讨
没有先给*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);
p……

[解决办法]
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指针上。。。。没赋值的时候里面不知道是什么值的。所以好习惯是一开始就初始化。

读书人网 >C语言

热点推荐