为什么这个代码打印' 7'

时间:2016-06-29 06:51:08

标签: stack heap

为什么这段代码打印' 7' 试图理解Stack和Heap的外观以及它在内存分配中的外观

function showLogHistory() {

    var questionId = document.getElementById('txtQuestionId').innerHTML;

    var url = "myAction.do?dispatchMethodName=showmyAudit&questionId="+questionId;

    if ( $.fn.DataTable.isDataTable('#tblmyAudit') ) {
        $('#tblmyAudit').DataTable().destroy();
    }

    $('#tblmyAudit').DataTable( {

        "initComplete": function(settings, json) {
                $("#tblmyAudit tbody tr.data-in-table").each(function () {
                var i=0;
                    $(this).find('td').each(function (index) {
                        var currentCell = $(this);
                        var nextCell = 
                           $(this).closest('tr').next('tr').find('td').eq(i).length > 0 ?
                           $(this).closest('tr').next('tr').find('td').eq(i) : null;
                        if ( currentCell.text() !== nextCell.text()) {
                            currentCell.css('backgroundColor', 'yellow');
                        }
                        i=i+1;
                    });
                });

        },

        "ajax": {
            "url": url,
            "cache": true
        },

        "columns": [
                { "data": "questionId" },

                { "data": "Category" },
                { "data": "Area" },

                { "data": "question" },
                { "data": "answer" },

                { "data": "updated_by" },
                { "data": "updated_date" }

            ],

        "scrollX": true,

        "columnDefs": [ {
                "targets": [ '_all' ],
                "orderable": false
        } ],

        "createdRow": function( row, data, dataIndex ) {
              $(row).addClass( 'data-in-table' );
          }
    } );

    $('#detmyAudit').modal('show');
}

如果您可以附加一堆堆栈和堆内存,那么非常感谢

2 个答案:

答案 0 :(得分:0)

您正在将指针传递给第一个 Cls 实例。在你的功能中创建的第二个是完全不同的对象。

换句话说,您正在打印第一个对象的属性值,即 Main() a 指向的属性值。

当您将 a 变量重新分配给函数内的新对象时,主要内部的 a ( )仍然指向原始对象。

我不确定我是在解释这个问题...... :)或许我甚至误解了这个问题?

答案 1 :(得分:0)

static void Func(Cls a)
{
    a.v = 7;   <----- This is modifying the Cls you create in Main function
    a = new Cls();
    a.v = 2;   <----- This is a new and locally referenced Cls whose value is neither returned to the main function nor is a global variable
}