ポインタ値は、2つの変数を交換する排他的論理和演算のために使用することができます

勝利システムにおけるポインタの4バイトは、Linuxシステムで6つのバイトを占有するので、ポインタは、整数intまたは長いへのポインタを変換する必要があり、直接XOR演算ではなく、Linuxシステムは、長くすることができます。

以下は二つのポインタのポインタ交換の排他的論理和演算です。

    する#include <stdio.hの> int型のmain()
    { int型 * A * B; 
        符号なしのロングAA、BB; 
        のprintf(" A:P%\ N- " 、A); 
        のprintf(" B:P%\ N- " 、 B); 
        AA =(符号なしロング)A;     // ポインタ変数は整数に変換され、 
        BB =(符号なしロング)B;     // Bのポインタ変数は整数に変換される  
        のprintf(" \ N- " ); 
        AA ^ = BB。
        BB ^ = AA;     //
    
    
        
    
    

    この時= AA BB 
        AA BB = ^;     // この時間= BB AA 
    
        A =(INT *)AA;         // AAは、ポインタ変数のポインタ型に変換され、 
        B =(INT *)BB;         // BBは、ポインタ変数のポインタに変換されます。入力
    
        のprintf(" :P%\ N- Aを" ;、A)
        のprintf(" B:P%\ N- " 、B); 
       
        戻り 0 ; 
    }

Linuxの64システムにおいて動作結果は次のとおりです。

0x7ffc70da4cf0 
    B:0x4004e0 
    0x4004e0 
    B:0x7ffc70da4cf0

我々は2の交換価値は一時的な変数である必要はないことを見ることができるように、XOR演算もオプションです。

上記のコードから:https://blog.csdn.net/weixin_39666151/article/details/90731384

単一リンクリストの実装を使用して線形形式を設定するには、逆の操作以下に添付:

#include <iostreamの> 
する#include <ビット/ STDC ++ H.>
 の#defineロングロングINT
 使用 名前空間STD; 
typedefは構造体
{ 
    int型のlen;
     INT * 次に;
     // int型のLISTSIZE; // これは、テーブルの順序で、この問題ではありません要件
}ノードは、

// 逆関数設定
ボイド逆(*ノードリスト)
{ 
    ためINT I = 0 ;私は<リスト- > LEN / 2 ; I ++)// 第一スイッチング素子と最後の要素、第二最後から二番目の要素とスイッチング素子、およびように、限り、テーブルの半分が一時変数の値を交換するためにも使用することができるように、そうすることが、追加のストレージスペースを必要とし、^は排他的論理和演算表し
    { 
        リスト- >次の[I] =リスト- >次の[I] ^リスト- >次の[リスト- > LEN - I - 1 ]。
        リスト - >次の[リスト- > LEN - I - 1 ] =リスト- >次の[I] ^リスト- >次の[リスト- > LEN - I - 1 ]。
        リスト - >次の[I] =リスト- >次の[I] ^リスト- >次の[リスト- > LEN - I - 1 ]。
    } 

} 

ボイドプリント(ノード・リスト)
{ 
    ためINT iが= 0 ; I <リスト- > LEN; I ++)// 遍历 
        COUT <<リスト- >次の[I] << "  " 
    coutの << てendl;

主な機能、メイン機能で直接破壊初期化シーケンステーブル
{
     INT I = 0 
    ノード・リスト; // 構造のノードポインタの定義 
    一覧=(ノード*)はmallocはsizeof(ノード)); // アプリケーションのための動的なメモリポインタ
    
    COUT << 要素の数を入力してください; 
    CIN >>リスト- > LEN; // 入力シーケンステーブルの長さ 
    リスト- >次に=(INT *)はmallocはsizeofINT)*リスト- > LEN); // 、固定長のシーケンステーブルダイナミック・アプリケーション・メモリであるint型にキャストし、再集合が逆排他的論理和演算子の間に使用することができる、ポインタ自体を使用して排他的論理和演算ない
    
    COUT << "入力要素てください:" ;
     のために(私は= 0 ; I <リスト- > LEN; I ++)// ループの入力要素、アレイポインタが格納されている 
        >> CINリスト- > ;次に[I] 
    
    COUT << " フロント対向インバース表:; 
    印刷(一覧); // カスタム関数の出力 
    反転(一覧); // セットの逆操作 
    COUT << カウンターの後に表が逆である:" ; 
    印刷(一覧); // 出力が反転した後に設定されています
    
    無料(リスト- >次); // 開かれたフリースペース、ポインタ構造体を忘れないでください
    無料(リスト); 
    
    の戻り 0 ; 
}

リニアテーブル逆のセットの下に取り付けた、オーダーテーブル実装

書式#include <iostreamの>
 に#define int型はlong long 
の#include <マップ>
 使用して 名前空間はstdを、

署名されたメイン()
{ 
    int型のn;
    int型 VIS [ 100 ]; 
    cinを >> N;
    以下のためにINT iが= 1 ; I <= N; I ++ 
        CIN >> VIS [I]。
    int型私は= 1 ;
    int型 J = N;
    一方、(I < J)
    { 
        int型TEMP。
        TEMP =  VIS [i]は、
        VIS [I] = VIS [J]。
        VIS [J] = TEMP; 
        I ++ ; 
        J - ; 
    } 
    ためINT iは= 1 ; I <= N; I ++ 
        COUT << VIS [I] << "  " 
    coutの << てendl;    
    リターン 0 ; 
}

研究ポンダー上記単鎖の操作と良いの理解

おすすめ

転載: www.cnblogs.com/biaobiao88/p/12042132.html