本文介绍了没有较为混乱指针的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
以下是我的code:
的#include<&stdio.h中GT;
诠释的main()
{
所以char a [10] =你好!;
无效F(焦B〔])
{
// 1的printf(* a为:%S \\ n,*一);
的printf(&放大器;一为:%p \\ n,&安培; A);
// 2的printf(与&&放大器;一个为:%p \\ N,及(&放大器;一));
输出(A的地址为:%p \\ n,一);
的printf(a的值是:%S \\ n,一);
的printf(B的地址为:%p \\ n,B);
的printf(B的值是:%S \\ n,B);
// 3的printf(* b为:%S \\ n,* B);
输出(和b为:%S \\ n,和b);
} F(一); 返回1;
残培();
}
运行上面的code给出的输出:
&放大器;一个是:0028FF1C
a的地址是:0028FF1C
a的值是:嗨!
B的地址是:0028FF1C
B的值是:嗨!
和b是:∟(
在输出:
为什么是&放有不同的输出;一个
和和b
;
尽管a和b有相同的参考
另外,
我提到他们的3号意见。
如果我删除斜线逐一执行它们,我获得以下2个问题:
-
在执行任何评论。 1和; 3:
abc.exe已停止工作。
-
在执行任何评论。 2:
abc.c:在函数'F':
abc.c:14:32:错误:需要左值的一元'和;'操作
的printf(与&&放大器;一个为:%p \\ N,及(&放大器;一));
^
解决方案
-
第一点: 。
-
2点:
的printf(和b为:%S \\ n,和b);
是错的并调用UB,因为不正确的格式说明的。您需要更改为的printf(和b为:%p \\ n,(无效*)和b);
-
3点:
及(&安培; A)
是错误的。操作数为&安培;
必须是一个左值,而不是其他的地址的,这是不是一个左值。相关阅读:
C11
,章§6.5.3.2
,对于操作数类型and the return type
这篇关于没有较为混乱指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!