English 中文(简体)
1. 射线初始化
原标题:Array Initialization
  • 时间:2011-03-03 00:35:57
  •  标签:
  • c++

我试图在一个阵列中分配价值观:

#include <iostream>
using namespace std;
int* c;
int n;
int main()
{
    scanf("%d", &n);
    c = new int[n];
    for (int i = 0; i < n; c[i] = i++  )
    {
        printf("%d 
", c[i]);
    }
    return 0;
}

然而,我没有获得所期望的产出,即N=5,0 1 2 3 4。 相反,如果我使用指示,c[i] = ++i,我获得产出<代码>-842150451 1 2 3 4。 请解释一下我,我是这样说的,我怎么纠正呢?

最佳回答

<代码>++i值为以下>:i。 因此,如果从零开始,你就第一次分配价值1。 参看。 分配值,但请why, 寄给这里的虫 can。

i, 可在i上通过i++加以修改。 ++i 是未经界定的行为,除非两者之间有所谓的“相同点”。 在此情况下,见。 语言这一相当复杂的部分没有界定的行为和顺序

尽管这一行为没有按照标准加以界定,而且可能无法从一到二者之间保持一致,但显然,你的方案已经做到了thing。 很显然,它根本就没有确定指数0(至少在第一版之前,不在此列),而考虑到 lo体在<><>之前发生,这一点是可以理解的。 “for”的最后一个部分,因此,在分配给你时,你会以这种原始记忆为代价。 它指定了<代码>1至index1等。

这意味着,它可能还试图将数值<代码>5至c[5],即所谓的“变异”类,以及更不明确的行为,以你已经做的事情为准。 <>Attempting to it may overwrites other memory, which on any given day may or may not contained some important.

定本是将某些价值分配给<代码>c[0],不试图指定<代码>c[5],而该编码确实存在任何进展,不试图“同时”使用<代码>i。 通常请你写:

for (int i = 0; i < n; ++i) {
    c[i] = i;
    printf("%d 
", c[i];
}

如果你出于某种原因急于在 lo物的第三条款中分配,你可以使用 com操作器提出顺序点:

for (int i = 0; i < n; c[i] = i, ++i) {
}

但当然,如果你这样做,你可以在休息室打印c[i]的价值。 尚未分配,因为第3条没有在每条休息期结束前进行评估。

You could also try c[i] = i+1, ++i, but not ++i, c[i] = i because then we re back to trying to assign to c[5], on the last iteration.

问题回答

首先,你们需要理解,休息的最后一部分是在每一胎的end上执行的,因此,你认为:

-842150451 1 2 3 4

这是因为您在分配之前印刷了<代码>c[0],因此其价值可能是什么。 其余部分符合预期。

教训:不要ak笑,不要把事情 into在 lo的最后阶段。 2. 明确和简单地阐述你的法典:

for (int i = 0; i < n; ++i  )
{
    c[i] = i;
    printf("%d 
", c[i]);
}

首先,你声称,你想要“在休息条件下”分配价值观。 http://www.ohchr.org。 标题的第二部分(i < n. 您在第三部分履行此项任务,即not。 因此,你为什么要说你想要在条件范围内分配价值观,而没有这样做?

其次,诸如<代码>c[i] = i++或c[i] = ++i等词语在C++中没有任何界定的行为。 在C++中,修改变量为非法,同时为任何其他目的阅读,而无需中间顺序。 然而,你正是这样做的。 对贵法典的行为没有作出有意义的解释。 页: 1 它可以出于任何任意原因做任何事情。

第三,在<><<>条码>中引入任何内容一般不是好的想法。 您能否更详细地解释你试图做什么以及为什么要做什么? 如果不这样做,就很难找到任何有意义的东西。

你的根本问题是,(a)结构中的说法是如何打破和执行的。 (头1;第2段;第3段)的结构与:

st1;
while (st2) {
    <body>
    st3;
}

因此,您的第3次发言,c[i] = i++,在<>后执行。 www.un.org/Depts/DGACM/index_french.htm

增收前诉增收后问题就是这样。

为什么<代码>c[i] = ++i产生未经界定的行为。 本条对<代码>++(数值(前或职位)未作界定,并在相同表述中再次使用。 在本案中,似乎正在对<代码>++i进行评价,然后对任何其他事项进行评价,并导致基本上执行。

c[1] = 1;
c[2] = 2;
...

这意味着c[0]从没有开始,而是基本上具有垃圾价值。 似乎就像你想要的次序一样。

c[0] = 0;
c[1] = 1;

为了达到这一顺序,你需要将初始化和增减分成单独的发言。

c[i] = i;
i++;




相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?