因为在这个例子中,由于指针运算,我能够读取integer2
的值:
#include <stdio.h>
int main() {
int integer1 = 1;
int integer2 = 2;
int *p = &integer1;
p++;
printf("%d\n", *p);
}
输出:
$ ./test
2
我想知道为什么在这个例子中:
#include <stdio.h>
int main()
{
int array[2] = {0, 1};
int variable = 0;
for(int i = 0; i < 3; i++) {
printf("%d\n", array[i]);
}
}
然后我无法读取试图指向下一个整数的变量的值,但这就是我得到的:
0
1
336859392
我试着打印
161695488
161695492
161695480
变量的地址不仅小于数组中第一个元素的地址,甚至也不是前一个。
为什么在第一个例子中变量的地址是连续的,而在第二个例子中不是?
关于变量和缓冲区在堆栈中是如何分配的,我可能有些不明白。
编辑:我知道不应该这样做,但我试图理解缓冲区溢出(更现实地说,缓冲区应该是字符,由用户输入),目标应该是改变变量的值。所以我想了解的是,是否有可能知道变量在内存中的确切位置。
EDIT2:事实证明,给予-fno-stack-protected ector使其按预期工作,因此gcc在默认情况下添加了某种保护,以避免缓冲区溢出
局部变量的放置是实现的一个细节。它们可以按其认为合适的任何顺序放置。
试图读取数组的边界会调用未定义的行为。您看到的不一致结果就是这种情况的表现。
例如,如果我运行你的第一个代码片段,我不会得到2作为输出。打印每个变量的地址时,我得到:
&integer1=0x7ffcfa6e8c24, &integer2=0x7ffcfa6e8c20
所以在我的例子中,实现将integer1
放在integer2
之后。
我对Java很陌生,只是有点纠结于数组。我有一个代码块,我已经写了当遵循教程,但正在努力理解它,希望有人能解释给我。 null 对不起,如果这是一个琐碎的问题给你,但这是最好的地方,我可以想到转向。
问题内容: 我有以下代码,想在javascript中返回变量“ t”: 后面的代码: javascript中的调用者变量: 那么,如何使变量“ t”从代码隐藏函数GetSomeText获得“结果”? 谢谢。 问题答案: 试试这个- 假设这是页面上的公共方法。这将在页面类上调用方法GetSomeText(),然后在呈现页面时对页面数据进行Response.Write()。结果应以JavaScript
可能重复: 为什么我的程序在循环8192个元素时速度很慢? 我一直在修补一个程序,我正在使用它来简单地求和一个2D数组的元素。一个错字导致了至少在我看来,一些非常奇怪的结果。 处理数组时,矩阵[SIZE][SIZE]: 运行非常快,然而是上面的行SUM1...已修改: 就像我在一次意外中没有意识到的那样,我注意到我的运行时间显著增加了。这是为什么?
问题内容: 我刚刚开始学习Go,有些事情引起了我的注意。 功能如下: 等等。作为来自C语言的人,我想知道: 1)是否可以通过变量本身来调用这些函数(如中所述)? 2)这是一种常见的做法(定义泛型函数并让其找出类型及其应执行的操作),还是仅用于内置类型。例如,如果我要定义自己的类型,例如,是否应该在类型内定义和附加函数,并将其命名为 还是应该定义一个接收列表的函数,例如: 问题答案: 1-您不能将内
问题内容: 我正在尝试使用当前位置在android中提交用户注册表格。我是android和java开发的新手。当我尝试在我的名称值对代码中访问onLocationChanged方法的myLat和myLan时,无法同时找到这两个变量。如何访问我的名称/值对代码中的两个变量。 问题答案: 您可能应该研究范围和成员变量。问题是,您不能在一个方法中声明一件事,然后尝试从另一方法访问它。 因此,我们将该事物
问题内容: 我试图在把手模板内的数组中指定项的索引: 使用这个: 如果上述方法不可行,我将如何编写一个可以访问数组中特殊项目的助手? 问题答案: 尝试这个: