【发布时间】:2015-12-22 05:35:18
【问题描述】:
我正在学习指针。我在教程中看到了这个代码示例。我试过了,但它给出了与教程不同的结果。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 5;
int myInt = 7;
int *pointer = &i;
printf("%i\n", *(pointer + 1));
return 0;
}
在 windows 机器上,输出为 2686740
在 linux 机器上,输出为 7。
这是什么原因?
【问题讨论】:
-
查找
undefined behavior。在*(pointer + 1)上没有什么特别保证存在,因为代码从不为其分配或保留任何东西。另外,请指出“教程”,以便其他人知道避免它。 -
@dxiv 我不知道这是否是一个糟糕的教程。事实上,我是一个绝对的初学者。 [链接]youtu.be/5jQ2ZiXzJjE?t=3m57s
-
仅从您发布的示例来看(抱歉,没有也不会观看视频),这要么是一个糟糕的教程,要么是针对不同受众的关于编译器/操作系统的一些特殊情况的教程行为。在任何一种情况下,
learning pointers的来源都是完全错误的。给自己找一些其他基本的、成熟的、有信誉的书籍或在线教程。一旦您了解为什么您刚刚发布的问题在标准 C 的上下文中没有意义,请在此处添加您的答案,我将是第一个支持它的人。 -
@HakanAs 这是一个垃圾教程,别看了。作者在评论中说:“编译器不保证变量会这样排列。我只是假设因为它们是给我的,所以它们是给大多数人看的,但我想我错了。 "所以他对 C 基础知识一无所知,但他认为创建一个 C 教程系列是个好主意...
标签: c pointers dereference pointer-arithmetic