我不明白指针变量在传递给函数时是如何工作的

时间:2017-03-28 02:30:04

标签: c++

我不明白指针变量在传递给函数时是如何工作的。你能简单介绍一下吗?另外,我不明白指针返回函数是如何工作的。我觉得如果我对两者都有更好的直觉,我可以在需要时应用它。

1 个答案:

答案 0 :(得分:2)

按值

因此,当您将变量传递给函数时,它会创建该函数中使用的该变量的' ,这意味着如果您修改了该副本,不会修改原件,而是你要修改那份副本。

DataTable

将打印

 public partial class MainWindow : Window
 {
    public class DummyClass
    {
        public int SelectedValue { get; set; }
        public string DisplayValue { get; set; }
    }

    public ObservableCollection<DummyClass> DummyClassCollection;

    public MainWindow()
    {
        InitializeComponent();

        DummyClassCollection = new ObservableCollection<DummyClass>();

        DummyClassCollection.Add(new DummyClass() { DisplayValue = "Item1", SelectedValue = 0 });
        DummyClassCollection.Add(new DummyClass() { DisplayValue = "Item2", SelectedValue = 1 });
        DummyClassCollection.Add(new DummyClass() { DisplayValue = "Item3", SelectedValue = 2 });

        DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
        DataTemplate dataTemplate = new DataTemplate();
        FrameworkElementFactory control = new FrameworkElementFactory(typeof(ComboBox));

        control.SetValue(ComboBox.ItemsSourceProperty, DummyClassCollection);
        control.SetValue(ComboBox.DisplayMemberPathProperty, "DisplayValue");            

        //
        //Some binding to connect ComboBox Selectedvalue to DataTable values
        //

        dataTemplate.VisualTree = control;
        templateColumn.CellTemplate = dataTemplate;
        templateColumn.Header = "DummyColumn";            
        dgGrid.Columns.Add(templateColumn);

        DataTable table = new DataTable();
        table.Columns.Add("DummyColumn");
        table.Rows.Add(1);
        table.Rows.Add(2);

        dgGrid.AutoGenerateColumns = false;
        dgGrid.ItemsSource = table.DefaultView;

    }
}    

参考

如果您传递一个指向函数的指针,您传递了函数外部存在的变量的内存地址,这允许您遵循该地址,并修改存在于该函数之外的变量从内部运行而不必通过返回参数完成。这可以让你从函数中返回其他东西,比如成功或失败。

int x = 1;
std::cout << "Outside Before Function: " << x << std::endl;
function(x);
std::cout << "Outside After Function: " << x << std::endl;

void function(int x) {
    x = 100;
    std::cout << "Inside Function: " << x << std::endl;
}

将打印

Outside Before Function: 1
Inside Function: 100
Outside After Function: 1

作为退货

传递指针返回对于内存分配包装器,单例实现以及要列出的太多东西或者我现在甚至可以想到的东西都很有用。

Malloc Wrapper示例

int x = 1;
std::cout << "Outside Before Function: " << x << std::endl;
function(&x);
std::cout << "Outside After Function: " << x << std::endl;

void function(int * x) {
    *x = 100;
    std::cout << "Inside Function: " << *x << std::endl;
}