a=(int)p 和a=(int *)p 有什么区别
char *p;
请问:a=(int)p 和a=(int *)p 有什么区别
谢谢前辈了。
[解决办法]
#include <stdio.h>
int main ()
{
char *p= "a ";
int a;
int *b;
a=(int)p;
b=(int *)p;
printf ( " a=%s ",a);
printf ( " b=%s ",b);
printf ( " p=%s ",p);
getchar();
}
a,b,p 的址都是一样的哦
如果a是个整数 b是个指正 应该不一样才对 奇怪哦
[解决办法]
认为你这样写是错误的:
a=(int)p
因为p在这里 实际是 内存地址
应该a=(int)*p
[解决办法]
地址本来就是一个整数 只是我们平时用16进制来表示 只是我不知道 居然这得a依然保留的是个地址而编译器并未把它当作一个普通的整形变量来处理
a=(int)p 这得写法可以编译通过 所以应该不算是个错误
只要知道 p是地址(指针的值) *p是地址对应内存中的值
a=(int)*p 这个写法在Dev-C++ 可以编译通过 但运气会报错
[解决办法]
#include <stdio.h>
int main ()
{
char *p= "a ";
int a;
int *b;
a=(int)p;
b=(int *)p;
printf ( " a=%s ",a);
printf ( " b=%s ",b);
printf ( " p=%s ",p);
getchar();
}
a,b,p 的址都是一样的哦
如果a是个整数 b是个指正 应该不一样才对 奇怪哦
=======================================
这里都是printf( "%s ",地址);
前边把地址变成各种形式,最后还是那个地址,所以结果当然一样了
[解决办法]
char *p= "a ";
具体说,int a; a=(int)p; a里存放了p指针指向的地址
int *b; b=(int *)p; b指针为整型指针,强制把字符型指针p转换成整型,地址赋给了b(p并未改变) <注意这里p原来指向的内存是 'a ' '\0 '...>
所以最后
printf ( " a=%s ",a);
printf ( " b=%s ",b);
printf ( " p=%s ",p);
显示字符串,可不管你什么类型,反正printf ( " X=%s ",地址);里那个位置就认为是一个字符串地址,然后按字符串输出。。。