为什么会是这样
#include <stdio.h>int main()
{
const int* i = 6;
i++;
printf("为什么等于这个数%d\n",i);
getchar();
}
据我所知,这个程序应该运行不起来的,你给一个指针赋值为不为0的数这是要搞哪样 你给指针赋一个常量值想干什么????
指针是什么?????
lz再看看书吧。 const int* i = 6;不能讲一个整型常量赋值给一个整型指针
只能写成int* i=(int *)6 试试呗 我就路过看看 fireofsun 发表于 2014-11-5 08:22
据我所知,这个程序应该运行不起来的,你给一个指针赋值为不为0的数这是要搞哪样
我只是改变一下const的值,我已经明白他为什么输出10了 qzh130 发表于 2014-11-5 08:47
你给指针赋一个常量值想干什么????
指针是什么?????
lz再看看书吧。
我只是做一个试验,改变const的值 calton007 发表于 2014-11-5 16:24
const int* i = 6;不能讲一个整型常量赋值给一个整型指针
只能写成int* i=(int *)6
这只是一个试验,const是一个声明只读变量 #include <stdio.h>
int main()
{
const int* i = 6;
i++;
printf("为什么等于这个数%d\n",i);
getchar();
}
为什么等于10int = 4 + 6; 涉及优先级问题吧 1980469235 发表于 2014-11-7 00:19
我只是改变一下const的值,我已经明白他为什么输出10了
常量按理说赋予的初始值是不允许改变的吧……?C++和java至少是这样 我把前三句汇编了下
第一句: const int* i = 6;
00401028 mov dword ptr ,6 // 指针i = 6
第二句: i++;
0040102F mov eax,dword ptr // eax = i = 6
00401032 add eax,4 // eax = eax + 4 = 10
00401035 mov dword ptr ,eax // 指针i = eax = 10
第三句: printf("为什么等于这个数%d\n",i);
00401038 mov ecx,dword ptr // eax = 10
0040103B push ecx // 参数i
0040103C push offset string "\xce\xaa\xca\xb2\xc3\xb4\xb5\xc8\xd3\xda\xd5\xe2\xb8\xf6\xca\xfd%d\n" (00 // 参数"为什么等于这个数%d\n"
00401041 call printf (00401400) // 调用printf(输出的值为10)
也就是说虽然i是一个指针,但是它同时也是一个变量(和int、char等等相同),
第一句将i赋值为6,
第二句i++,因为指针变量i的类型为int(一般大小为4个字节,是情况而定),指针变量加1相当于+1 * sizeof(指针类型),所以最后i的值为6 + 4 = 10
第三句输出指针i本身的值,所以输出10,但是如果是*i则表示输出在内存i处(内存地址10处)的内容 学习
页:
[1]