&p1和(int*)p1的区别?

SoulLove-晨曦 2014-07-09 01:27:56
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int p1 = 2014;
cout << &p1 << endl;
cout << (int*)p1 << endl << endl;

char p2[] = "job";
cout << &p2 << endl;
cout << (int*)p2 << endl;
cin.get();
return 0;
}

输出结果为:
0074F7F4
000007DE

0074F7E8
0074F7E8

--------------------------------------
我知道&p1是取p1变量的地址
(int*)p1是将p1强制转换成int*(指针)类型,但不知道为啥会输出这样的结果...求解释
...全文
429 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-07-09
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390830408 不要企图依赖输出指针相关表达式的值【比如printf("%p\n",...)】来理解指针的本质, 而要依赖调试时的反汇编窗口中的C/C++代码【比如void *p=...】及其对应汇编指令以及内存窗口中的内存地址和内存值来理解指针的本质。 理解讨论之前请先学会如何观察
我看你有戏 2014-07-09
  • 打赏
  • 举报
回复
引用 楼主 HuiJianWeiHongYan 的回复:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
	int p1 = 2014;
	cout << &p1 << endl;
	cout << (int*)p1 << endl << endl;

	char p2[] = "job";
	cout << &p2 << endl;
	cout << (int*)p2 << endl;
	cin.get();
	return 0;
}
输出结果为: 0074F7F4 000007DE 0074F7E8 0074F7E8 -------------------------------------- 我知道&p1是取p1变量的地址 (int*)p1是将p1强制转换成int*(指针)类型,但不知道为啥会输出这样的结果...求解释
cout输出了地址吧 printf("%d,%x",(int*)p1,(int*)p1); 试试这个
hjl0508 2014-07-09
  • 打赏
  • 举报
回复
学习了
xiaohuh421 2014-07-09
  • 打赏
  • 举报
回复
int p1 = 2014; cout << &p1 << endl; //输出变量p1的地址. cout << (int*)p1 << endl << endl; //把变量的值强制转换成指针地址, 然后输出这个指针. 相当于输出p1的值 (2014)10=(000007DE) char p2[] = "job"; cout << &p2 << endl; //输出数组首地址. cout << (int*)p2 << endl; //把char指针强制转换成int指针, 但指针值本身不会变化, 所以仍然指向同一个地址, 所以输出跟前面一样.
caewow 2014-07-09
  • 打赏
  • 举报
回复
引用 4 楼 u013171165 的回复:
(int*)p
将指针p的类型转换为整型指针.  首先
cout << (int*)p1 << endl << endl;
表示的是p1自身的值,2014转换为十六进制,就是7DE; P2本身是个char型数组,你
(char*)p2 
*p2指向数组中第一个元素,(char*)p2 指向数组所有元素,那么打印的肯定也是数组中的值,job; 而你写的
(int*)p2
你要知道数组名p2本身就是一个指针了,
(int*)p2
这样过后,就是把char型的指针强制转换为int型,还是指针,所以输出为0074F7E8
+1
The_Third_Wave 2014-07-09
  • 打赏
  • 举报
回复
引用 4 楼 u013171165 的回复:
(int*)p
将指针p的类型转换为整型指针.  首先
cout << (int*)p1 << endl << endl;
表示的是p1自身的值,2014转换为十六进制,就是7DE; P2本身是个char型数组,你
(char*)p2 
*p2指向数组中第一个元素,(char*)p2 指向数组所有元素,那么打印的肯定也是数组中的值,job; 而你写的
(int*)p2
你要知道数组名p2本身就是一个指针了,
(int*)p2
这样过后,就是把char型的指针强制转换为int型,还是指针,所以输出为0074F7E8
也就是 (int*)p1 没有类型转换,和*p1是一样一样的。
The_Third_Wave 2014-07-09
  • 打赏
  • 举报
回复
我是初学,请各位大神斧正!
The_Third_Wave 2014-07-09
  • 打赏
  • 举报
回复
(int*)p
将指针p的类型转换为整型指针.  首先
cout << (int*)p1 << endl << endl;
表示的是p1自身的值,2014转换为十六进制,就是7DE; P2本身是个char型数组,你
(char*)p2 
*p2指向数组中第一个元素,(char*)p2 指向数组所有元素,那么打印的肯定也是数组中的值,job; 而你写的
(int*)p2
你要知道数组名p2本身就是一个指针了,
(int*)p2
这样过后,就是把char型的指针强制转换为int型,还是指针,所以输出为0074F7E8
ztenv 版主 2014-07-09
  • 打赏
  • 举报
回复
(int*)p是将p的值强制转为地址,然后输出 (2014)10=(000007DE) &p是取p的地址 当然数组和整型有些不同。建议看看指针的书
  • 打赏
  • 举报
回复
If we take the integer 2014 stored in P1 as the address for an integer, here goes the print of this address in Hex: 7DE
SoulLove-晨曦 2014-07-09
  • 打赏
  • 举报
回复


变量不是直接存储的字符串常量,而是将字符串常量存储进一片新的内存区,变量指向了该内存区地址
这样理解是否正确呀? 但我还是无力想通上面的那个问题....

65,176

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧