反乱にはときに、現状を正さねばならないという主張があり、行動力またはカリスマ性のあるリーダーが現れ、被支配層を統率して進行する場合がある。リーダーは反乱の象徴であり、中心であるため、リーダーが倒れると同時に、その反乱は失速し、終息に向かう場合がある。19世紀後半から20世紀前半にかけ、アジア・アフリカ地域の民族主義が高まってゆく中で、欧米による植民地支配に対抗して起きた独立運動の盛り上がりの中には、インドのマハトマ・ガンディーなどのような歴史上特筆されるリーダーは少ないが、反乱によって圧制者の手から国家の独立を勝ち取らねばならない場合には、1人のリーダーよりも「民族の誇り」が、大衆全体をより強く動かしうる。当事者の支配層から見れば、規模の大小や、そこにどのような大義があるかは関係なく、それまで下に見ていた者が上に向かって弓を引く行為はすべて反乱としか見えない。イギリス側がインドの独立運動を「インド大反乱」と呼び、インド側は「第一次インド独立戦争」と呼ぶのは非常に象徴的である。
問題とは時に被支配層へのある種の弾圧であったり、貧困が原因の食糧不足であったり、非政治的で、比較的原始的なものである。こうした一時的あるいは慢性的な問題を、被支配層が選挙やデモ、請願などの平和的主張によって訴えることができ、支配者がその訴えを受け止める国家ならば、反乱は発生しづらい。あるいは、支配者が有能であり、被支配層の生活を考慮して善政を行う場合も、反乱が起きる可能性は低いと言える。逆に、被支配層から支配者への訴えを権利として認めない国家、訴えを弾圧する国家、あるいは平和的手段によって訴える事はできるが、支配者が常にそれを黙殺するような状態の国家、深刻すぎて平和的に訴える次元を過ぎたような問題のある国家では、反乱の可能性は高まる。歴史的に、選挙・請願・デモなどの平和的主張が被支配層の「権利」として認められるのは、民主政が定着し始めた19世紀から20世紀を待たねばならず、それ以前の帝政・王政が主流の世界では、被支配層には支配者を批判したり、不満を表明する手段がなく、またその権利を自覚していなかったため、幸運が有能な支配者をもたらさない限り、被支配層は支配者に対する不満を蓄積し続け、結果として反乱を起こす可能性が非常に高い時代だったと言えるだろう。「反乱」と類義・近似の言葉は、日本語にも英語にも数多くあるので「反乱とは何か」を考えるとき、その境界を見つけるのが多少難しい。英語では、反乱を大きく rebellion とし、民衆が非武装なら nonviolent resistance（市民的不服従）、武装していれば uprising と呼ぶ。
「配列の配列」の場合、内側の配列について、要素数が揃っていることを要求しないデータ構造であることもある。ジャグ配列 (jagged array)、不規則配列などと言う。これに対し、内側の配列の要素数が揃った配列を矩形配列 (rectangular array) などと言う。Javaにおける配列の配列はジャグ配列である。C#には前述の通り、「真の多次元配列」もあるが、それとは別に配列の配列もあり、そちらはJavaと同様のジャグ配列である。Javaによるジャグ配列の例を示す。int[][] numArr = new int[3][];numArr[0] = new int[]{1, 2, 3};numArr[1] = new int[]{4, 5, 6, 7};numArr[2] = new int[]{8, 9};System.out.println(numArr[1][1]);C#によるジャグ配列の例を示す。int[][] numArr = new int[3][];numArr[0] = new int[]{1, 2, 3};numArr[1] = new int[]{4, 5, 6, 7};numArr[2] = new int[]{8, 9};System.Console.WriteLine(numArr[1][1]);要素のアドレスを指定するための参照の展開は、ジャグ配列では次元の数だけ必要なのに対し、矩形配列では1回で済む。また配列の領域を確保する際、ジャグ配列では次元ごとに領域確保を繰り返す必要があるのに対し、矩形配列では1回のnew演算子の使用で領域が確保できる。ただし矩形配列は全要素が収まる連続領域を確保しなければならず、疎行列などのまばらな配列には空間的オーバーヘッドが大きくなってしまうことから向いていない。また、.NET Frameworkの中間言語には1次元配列の要素アクセスに関する専用命令が存在するため、矩形配列よりもジャグ配列のほうが速度性能面で有利になるケースも存在する。C言語では、配列を指すポインタは、その配列のサイズを固定しなければならない。配列を指すポインタではなく、「『配列の先頭要素を指すポインタ』の配列」によって、次のようにしてジャグ配列のようなデータ構造を作ることができる。int *numArr[3];int tmp0[] = {1, 2, 3};int tmp1[] = {4, 5, 6, 7};int tmp2[] = {8, 9};numArr[0] = tmp0;numArr[1] = tmp1;numArr[2] = tmp2;printf("%d\n", numArr[1][1]); // print "5"例示したように、「配列の配列」と同様の構文でアクセスできるが、データ構造としては異なっている。当然、（生成されるコードを読めばわかるが）意味的に違うものであって、混同してはならない。ましてや「多次元配列がサポートされていると考えるべき」などと考えるのは、混乱の元でしかない。