- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下代码:
1: #include <stdio.h>
2: int poin(int p[4]){
3: printf("%u\n", p[0]);
4: printf("%u\n", p[1]);
5: printf("%u\n", p[2]);
6: printf("%u\n", p[3]);
7:
8: }
9: int main(){
10: int *p[4],a=1,b=2,c=3,d=4;
11:
12: p[1]=&b;
13: p[2]=&c;
14: p[3]=&d;
15: p[0]=&a;
16: poin(*p);
17: return 0;
18:}
它显示了这个输出:
1
2686716
2686712
2686708
Process returned 0 (0x0) execution time : 0.078 s
Press any key to continue.
我们修改一下第14行和第15行的程序,看看修改后的代码:
1: #include <stdio.h>
2: int poin(int p[4]){
3: printf("%u\n", p[0]);
4: printf("%u\n", p[1]);
5: printf("%u\n", p[2]);
6: printf("%u\n", p[3]);
7:
8:}
9: int main(){
10: int *p[4],a=1,b=2,c=3,d=4;
11:
12: p[1]=&b;
13: p[2]=&c;
14: p[3]=&a;
15: p[0]=&d;
16: poin(*p);
17: return 0;
18: }
它显示以下输出:
4
3
2
1
Process returned 0 (0x0) execution time : 0.062 s
Press any key to continue.
请解释一下这些输出发生的原因和方式,我很困惑并且无法理解程序
最佳答案
这两个程序都有未定义的行为,因为未指定编译器如何(以何种顺序)将具有自动存储持续时间的变量放置在内存中。
但是例如第二个程序中获得的结果可以用以下方式解释。
看来编译器将变量a、b、c、d按顺序放置
d, c, b, a
没有内存间隙。
因此,类型为 int *
的函数参数 p
指向变量 d
,即 d< 之后的所有变量
被输出。
考虑到这些陈述
12: p[1]=&b;
13: p[2]=&c;
14: p[3]=&a;
甚至是多余的,因为该函数不访问 p[1]
、p[2]
和 p[3]
。
写就够了
15: p[0]=&d;
该函数不处理数组。它处理指向变量d
的指针。
为了使这一点更清楚,只需按以下方式运行第二个程序
poin(&d);
没有初始化数组元素。
正确的程序应该是这样的
1: #include <stdio.h>
2: int poin(int **p ){
3: printf("%u\n", *p[0]);
4: printf("%u\n", *p[1]);
5: printf("%u\n", *p[2]);
6: printf("%u\n", *p[3]);
7:
8:}
9: int main( void ){
10: int *p[4],a=1,b=2,c=3,d=4;
11:
12: p[1]=&b;
13: p[2]=&c;
14: p[3]=&a;
15: p[0]=&d;
16: poin(p);
17: return 0;
18: }
关于看不懂这些用C写的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48443097/
所以我今天在学习c。我编写了一些代码以使用 getchar() 获取输入并将其保存在变量中以了解整数输入的工作原理。 因此,如果用我的键盘输入“1”,然后按回车键,我会返回 4910 的值。我预计 4
我是一个非常沮丧的新手!我真的不知道从哪里开始。我有一个基于傻瓜书中的应用程序的应用程序。成功了。然后尝试将其转换为使用 WIMMOne 对话框来显示时间和日期。经过一系列错误的启动后,我加载了他们的
我们刚刚使用 bitbucket 建立了一个项目。我们将“生产”[P] 代码放在一个存储库中,然后我创建了它的一个分支 [m],然后我的同事 [C] 也创建了一个分支。 [P] /
我不明白我看到的错误,也不明白我应该在我的 ESLint 配置中更改什么来修复它,在深入研究了一段时间之后。 我有一段使用 ECMA 版本 6 (ES6) 的 JS 代码,如下所示: const la
我的代码有很多问题。编译时出现以下错误: “Ecommerce.DataHelpers.ProductNodeLoader”未实现接口(interface)成员“System.Collections.
我不明白这个语法是如何工作的,也找不到关于它的文档: word = '123xyz567' s = ''.join (c if c.isdigit() else ' 'for c in word) 第
不知道怎么解释,是在IE7中出现的,右边的DIV向右浮动,取消设置它的宽度,左边 float 的子DIV会变成和父DIV一样宽。 http://jsfiddle.net/dyvar/1/ IE 7 最
$newUser.addClass(newTweet.user).attr('data-user', newTweet.user).text('@' + newTweet.user + ': ');
我有一个带有输入框的 tkinter GUI,我只想允许数字。有人可以向我解释验证中每个命令/代码行的作用。我不明白 vcmd 变量和所有 '%i' '%s' 的东西。谢谢:) 更新:我有一个不同的应
我正在尝试使用 Richard Dawkin 的 Weasel Program 的 Python 版本这演示了随机选择与累积选择之间的差异,并且我的变异算法存在一些问题。我想也许我不明白如何使用Pyt
我正在学习嵌套,我的任务是让每一行都以缩进开头。这是我的代码,但它不起作用 $nestingDepth = 0 def logger description, &block puts "Beg
我正在编译 gcc 并阅读来自 https://gcc.gnu.org/install/configure.html 的手册 具体说明 --with-local-prefix=dirname Spec
我是一名优秀的程序员,十分优秀!