2016-09-14 2 views
0

В моем проекте cpp по некоторым причинам у меня есть переменная v типа char**&. Но на самом деле мне нужно преобразовать его в тип char*&. Как мне сделать конверсию?Как преобразовать переменную из char ** & в char * & безопасным способом?

static char*& GetValue(char**& _v) 
{ 
    static char* _vv; 
    _vv = (char*)_v; //TODO: remove static 
    return _vv;; 
} 
+0

это действительно зависит от содержания v и т. Д. И это какая-то домашняя работа? потому что это похоже на некоторое чтение относительно c и указателя. Также вы должны пометить этот код C, а не C++ – Hayt

+3

@Hayt Это ** - ** C++. В C. – NathanOliver

+2

ссылок нет. Но так уродливо, что это похоже на C –

ответ

0

Рассмотрим следующий пример (я определил char* как тип, чтобы увидеть это более ясно):

#include <iostream> 

using namespace std; 

typedef char * T; 
static T & GetValue(T *& _v) { return *_v; } 

    int main() 
    { 
     T s = nullptr; // NULL if not C++ v11 
     T *v = &s; 
     T &vr = GetValue(v); 
    cout << (void*)&vr << " " << (void*)&s << endl; 

    return 0; 

    } 

v безопасна в main области. GetValue принимает его ссылка возвращает заостренный значение в качестве эталона, с верхней рамки (не временный, я не получаю предупреждение «возвращение ссылки на временный» в противоположность, если я вернусь T())

Как еще одно доказательство, работает этот код дает я обе ссылки равны:

0x28fea8 0x28fea8 

любой недостаток в этом рассуждении/испытании?