1980469235 发表于 2014-11-4 14:34:57

为什么会是这样

#include <stdio.h>

int main()
{
   const int* i = 6;
   i++;
   printf("为什么等于这个数%d\n",i);
   getchar();
}

fireofsun 发表于 2014-11-5 08:22:18

据我所知,这个程序应该运行不起来的,你给一个指针赋值为不为0的数这是要搞哪样

qzh130 发表于 2014-11-5 08:47:03

你给指针赋一个常量值想干什么????
指针是什么?????
lz再看看书吧。

calton007 发表于 2014-11-5 16:24:47

const int* i = 6;不能讲一个整型常量赋值给一个整型指针
只能写成int* i=(int *)6

scdwuhan 发表于 2014-11-5 21:57:47

试试呗

iroser 发表于 2014-11-6 13:45:54

我就路过看看

1980469235 发表于 2014-11-7 00:19:55

fireofsun 发表于 2014-11-5 08:22
据我所知,这个程序应该运行不起来的,你给一个指针赋值为不为0的数这是要搞哪样

我只是改变一下const的值,我已经明白他为什么输出10了

1980469235 发表于 2014-11-7 00:20:56

qzh130 发表于 2014-11-5 08:47
你给指针赋一个常量值想干什么????
指针是什么?????
lz再看看书吧。

我只是做一个试验,改变const的值

1980469235 发表于 2014-11-7 00:22:21

calton007 发表于 2014-11-5 16:24
const int* i = 6;不能讲一个整型常量赋值给一个整型指针
只能写成int* i=(int *)6

这只是一个试验,const是一个声明只读变量

1980469235 发表于 2014-11-7 00:23:39

#include <stdio.h>

int main()
{
   const int* i = 6;
   i++;
   printf("为什么等于这个数%d\n",i);
   getchar();
}

为什么等于10int = 4 + 6;

694861283 发表于 2014-11-7 08:56:43

涉及优先级问题吧

一步人生終是謎 发表于 2014-11-7 19:42:08

1980469235 发表于 2014-11-7 00:19
我只是改变一下const的值,我已经明白他为什么输出10了

常量按理说赋予的初始值是不允许改变的吧……?C++和java至少是这样

风之残月 发表于 2014-11-7 22:23:04

我把前三句汇编了下
第一句:      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处)的内容

tlwangxd 发表于 2014-11-13 15:28:43

学习
页: [1]
查看完整版本: 为什么会是这样