int main(){int* a[5];int (*b)[5];int i = 2, j = 3, k = 4; b = a;a[0] = &i;printf("%d %d %d/n", *a, *a[0], i);printf("%d %d %d/n", a, a[0], &i);printf("%d ", b);b++;printf("%d/n",b);getchar();} []的優先順序比*高,故a、b兩個變數:a代表一個數組,其數組元素儲存的類型是int
方式一:使用gccgcc編譯有四步走,先行編譯,編譯,彙編,串連使用-S編譯選項gcc -S test.c 會在目前的目錄下產生test.s的檔案,該檔案即是相應的組譯工具 方式二:使用gdb首先編譯時間要是用-g編譯選項gcc -g ./test.c -o ./test 接著運行gdbgdb ./test--(可執行檔) 在gdb中使用 disassemble + frame(幀),即可查看相應程式碼片段的彙編代碼frame通常為一個函數名。方式三:使用objdump 命令為
為何要學習STL:資料結構與演算法是編程的核心,STL中包含各種資料結構和優秀的演算法,確實值得深入學習,本文中雖然著重使用,但希望有心的朋友能多看看相關資料結構的實現,對於C++語言確實會有較大協助。 STL庫有多個版本,我採用的是SGI版本,編譯安裝方法請參考如下連結:http://blog.csdn.net/hong201/archive/2009/07/06/4322975.aspxPS:按照網上孟岩老師的安裝方法,我出現了一些問題,後來按照上面文章所說的安裝成功。 關於為何採用SGI版
/* * ******************************************** * vector容器的基礎說明: ******************************************** * * 可進行隨機訪問,並且實現了在容器的尾端插入新元素 * Random Access Container 和 Back Insertion
/* * ******************************************** * slist單向鏈表容器的基礎說明: ******************************************** * * slist是SGI C++STL自設的一個容器,要安裝配置stlport才可以使用 * * Front Insertion
堆排序:n*log(n)的時間複雜度, 非穩定排序,原地排序。它的思想是利用的堆這種資料結構,堆可以看成一個完全二叉樹,所以在排序中比較的次數可以做到很少。加上他也是原地排序,不需要申請額外的空間,效率也不錯。堆的重要特點是每一次迴圈都會建立新的最大或最小堆。 C++代碼實現:void Heapfy(int A[],int idx,int max) //建立最大堆{int left=idx*2+1;int right=left+1;int largest=idx;if(left<
enums枚舉是實值型別,資料直接儲存在棧中,而不是使用引用和真實資料的隔離方式來儲存。(1)預設情況下,枚舉中的第一個變數被賦值為0,其他的變數的值按定義的順序來遞增(0,12,3...),因此以下兩個代碼定義是等價的:enum TrafficLight{Green,Yellow,Red}enum TrafficLight{Green = 0,Yellow = 1,Red = 2}(2)enum枚舉類型的變數的名字不能相同,但是值可以相同,例如:enum TrafficLight{Green
溫習一下資料結構,寫了一個棧操作的模板...第一次寫的時候還忘了寫解構函式,要吸取教訓啊。代碼:#ifndef STACK_H#define STACK_H#include<stdio.h>#include<stdlib.h>#include <iostream>using namespace std;template<class T>class Stack{public:int top;int maxtop;T *data;Stack(int
想來斷斷續續用C#也有好一段時間了,今天才發現foreach語句中迭代變數(Iteration Variable)是read-only的,囧~~不過此read-only也是相對的,對於Values-type和reference-type要區別對待。對於實值型別,那麼foreach中的變數是不能更改的;而對於參考型別,參考型別本身不能被更改,但是引用所指向的空間的資料則可以被更改。如樣本1和樣本2:int[] arr = new int[]{1,2,3,4,5};foreach(int item
面試的時候被問及了String類的實現,結果沒寫好... 就當是重新複習一下吧。 下面的程式並沒有把String類的所有成員方法實現,只參考教程寫了大部分重要的成員函數。 #include<iostream>#include<iomanip>using namespace std;class String{ friend ostream& operator<<
兜兜轉轉,因為要做Qt的項目,又要重新拾起C++這個對於我來說是啟蒙語言的編程工具了。因為是第一次自己負責設計項目的架構,顯得有些激動和有點迷茫。不過還好,感覺自己慢慢挺過來。基本的結構設計文檔已寫完和基本的工程架構已經搭好,很快就可以進入正式的編碼階段。今天寫模組類檔案的一個收穫是,在定義標頭檔時,能依賴前置聲明的就不要依賴定義,同時在適當的情況下應該用類型的前置聲明來減少標頭檔的匯入。例如,在標頭檔中定義類的一個指標成員時,該指標是工程中另外定義的類型classAccount的一種指標Acc
第一次使用params這個關鍵字,發覺這是蠻好用的一種參數形式。1、paramsparams關鍵字用在指定參數可變的場合中。在方法聲明中加了params關鍵字後不能再同時定義其他參數,在聲明方法中只允許params這個關鍵字的存在。範例程式碼:class Test{public void TestIntParams(params int[] vals){if(vals != null && vals.Length > 0){for(int i=0;
s=s+1與s+=1在官方網站上據說是等效的,可是在實際的應用中,它們之間還是有一點小小的區別,這些區別造成了一些困惑,現在就對這些區別做一些解釋。 前幾天一個很牛的朋友問我:“s=s+1與s+=1有什麼區別?”,我認為他在開玩笑,因為以這個朋友的實力,不會不知道這個的,我認為這是一個陷阱,趕快到MSDN上 進行查詢,得到的結果是:使用 += 賦值運算子的運算式,x += y等效於 x = x + y。既然MSDN上都說了“等效”,當然它們應該是一樣的。我的朋友立即給我發過來一段代碼,
c#的委託其實是一個特殊的類,這個類是一個抽象的類,下面就是它在MSDN中的定義:定義:看來它從介面ICloneable,
C++中類的概念讓很多新學者都困惑不解,很多書上對這部分也沒有系統的整理,往往顯的章節雜亂無章,概念滿天飛。其實經過仔細的思考,我發現類中的概念還是計較系統的,現在整理如下,順便理一下思路,也為以後的學習做好更好的鋪墊。 總體的思路如以下的順序 1.類的定義---其實就是定義了新的類型,同以前經典的類型如int,char等沒有任何區別。只是這個類定義中不但包含了資料(屬性),而且還有函數(方法)罷了. 2.對象的定義---使用新的類型,產生該類型的一個變數,在OOP中就叫對象或者執行個體。 3
#include <iostream>using namespace std;int main( void ){ cout << "1111:"<<typeid(1.1f).name() << endl; cout << "1111:"<<typeid(1).name() << endl; cout << "1111:"<<typeid('c').name()
本文主要通過一個實際的例子來解釋“代碼屬性”的概念代碼屬性是與代碼一起在程式的運行過程中為代碼服務的,理解“代碼屬性”概念的關鍵在於認識到“代碼屬性”也是一種類,它是一種特殊的類,一種從System.Attribute繼承出來的類。下面的代碼主要實現的功能是:在代碼運行異常的時候,根據該段代碼的“代碼屬性”給出這段代碼的作者以及這名作者的電子信箱。下面給出一個自訂的“代碼屬性”的類: using System;namespace CodeProperty{ /// <summary&
馳騁工作流程引擎c級使用者申請通知各位ccflow愛好者:---------------- ccflow 自開源以來,首次徵求C級使用者。如果您符合如下條件就可以申請C級使用者。 1, 已經把ccflow整合到你的系統中去了。 2, 已經處理至少三個以上的流程。 3, 已經在交付本單位或者客戶單位使用。 4, 在使用ccflow過程中協助過其它的朋友,或者介紹過其它的朋友使用ccflow。 報名到期日: 2011/09/31. 被認定為c級使用者後將會如下獎勵.
問題背景:form1包含一個splitter控制項,將form1分成左右兩塊,左邊塊中有一些label,右邊塊用來顯示其他form;要實現點擊左邊塊中的label,然後在右邊塊中顯示相應的form(假設叫form2,form3....)。有問題的設計:在form1左邊塊的label的點擊事件中初始化相應的form,即(new
#include <iostream>#include <string>#include <iomanip>using namespace std;int main(){for(int i=0;i<7;i++){cout.fill();cout.width(i+1);for(int j=13-2*i;j>0;j--){cout<<"*";}cout<<endl;}return