指针增量时的行为。 C ++

时间:2015-06-29 07:15:18

标签: c++ pointers dereference

请考虑以下代码:

--alter existing column to int
ALTER TABLE [dbo].[APPLICATION] ALTER COLUMN [NEW_B] INT NULL
GO

--add foreign key constraint
ALTER TABLE [dbo].[APPLICATION] WITH CHECK ADD CONSTRAINT [FK_APPLICATION_ATTACHMENT] FOREIGN KEY([NEW_B])
REFERENCES [dbo].[ATTACHMENT] ([ID])
GO

ALTER TABLE [dbo].[APPLICATION] CHECK CONSTRAINT [FK_APPLICATION_ATTACHMENT]
GO

我的编译器(Visual Studio 2012)在这种情况下打印:if( ! is_int($value) || $value > 4){ // Validation failed here } int 那么我们能以某种方式推断出输出并且这段代码合法吗?

2 个答案:

答案 0 :(得分:8)

您正在访问超出范围的内存(分配给单个int对象)。行为是 undefined ,即不可推导。尽管在语法上有效,但该程序不应被视为合法。

答案 1 :(得分:4)

  

那么我们可以以某种方式推断出输出并且这段代码合法吗?

指针以它们指向的类型的大小的倍数递增。当您向p添加4时,您将添加4 * sizeof(int),而不仅仅是4个字节。

如果你试图使p指向“下一个”整数,则将其递增1而不是4.否则,p将指向超出所分配结束的内存。

事实上,如果我没有弄错,您的分配只会创建一个值为3的int,而不是三个单独的int

int* p = new int(3);

尝试评论p += 4;行,你应该得到'3'作为输出。考虑到这一点,juanchopanza上面的回答是现场。