本文介绍了没有较为混乱指针的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是我的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. 在执行任何评论。 1和; 3:

    abc.exe已停止工作。


  2. 在执行任何评论。 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

这篇关于没有较为混乱指针的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-22 14:47