編輯:關於Android編程
int main() { int i=0; for(i=0;i<10;i++) { int j=10; j+=1; printf("%d ",j); //沒有static修飾的j每次都是10 } system("pause"); return 0; }代碼二:static修飾的局部變量
int main() { int i=0; for(i=0;i<10;i++) { static int j=10; j+=1; printf("%d ",j); //有static修飾的j每次都是上一次+1之後的值 } system("pause"); return 0; }從上面兩段代碼可以看出static修飾局部變量確實改變了變量的存儲位置,存儲在靜態區上,出了作用域也未被銷毀,所以代碼二的j每次都是加1之後的值
int count=3; int main() { int i=0,sum=0,count=2; for(i=0,sum=0;i剛一看到這道題是不是有點暈呢?確實剛開始的時候我也覺得有點害怕,因為裡面存在三種不同存儲方式的變量count:全局的,局部的,靜態的,關鍵是它還時不時的使用一下count這就容易讓人搞不清楚到底每次使用的時候調用的是哪一個count,不過不用怕,讓我們來慢慢分析
#define MAX 5 //define定義的標識符 const int max=10 //此時未將Max放入內存中而是放到符號表中 int main() { int i=MAX; //預編譯期間進行標識符的替換 int j=max; //此時為j分配內存,以後不再分配 int m=MAX; //再進行一次宏的替換,再分配內存 int n=max; //不再分內存配因為編譯器通常不為普通const只讀變量分配存儲空間,而是將他們保存在符號表中,這就使該變量成為一個編譯期間的值,沒有了存儲與讀內存的操作,從而使得效率較高。這就解決了為什仫在C++中以const來代替define定義的標識符和宏了吧
const int a=10; int const a=10;在C語言中const修飾變量使得該變量具有常性但依然是個變量(在C中const修飾的變量是常變量) 但是在C++中為了消除宏的缺點同時也需要定義常量,此時const修飾的變量去除了它在C中的變量的屬性,完全升級為一個具有常性的量(在C++中const修飾的變量是常量)比如下列代碼:
const int a=10; int arr[a]={0};數組的長度必須是一個代表常量的值,如果在.cpp下可以運行就可以說明在C++中const修飾的變量是否具有常性了;上述代碼在.c文件中是不可運行的,在.cpp下可以運行的,這就說明在C++中const修飾的變量已經不具有變量的性質了,完全是一個常量
int a=10; int b=20; const int *pa=&a; *pa=20; //錯誤 a=20; pa=&b;
int a=10; int b=20; int *const pa=&a; pa=&b;//(錯誤) *pa=b;const修飾的是pa,說明指針變量本身是不可以被修改的,但可以修改指針所指向的內容; 3).const即在*的左邊也在*的右邊
int a=10; int b=20; const int *const pa=&a; pa=&b;//(錯誤) *pa=b;//(錯誤)此時const即修飾*pa也修飾pa,說明指針所指向的內容是不可以修改的,指針變量本身也是不能被修改的 幫助記憶的小竅門: 如果我們把pa和a看作男女朋友關系,女生a可以換男朋友看作是可以修改變量本身的地址,女生a可以花男朋友的錢類似可以修改變量的內容;const在*的左邊就類似這個女生a是可以換男朋友的但是不可以花男朋友的錢,const在*的右邊就類似這個女生a是可以花男朋友錢的但是不可以換男朋友,const如果即在*的左邊也在*的右邊那這個女生可就慘了,即不可以換男朋友也不可以花男朋友的錢,是不是感覺很有意思呢?
int a=10; int b=20; int *pa=&a; int *pb=&b; const int **ppa=&pa; **ppa=b;//(錯誤) ppa=&pb; *ppa=&b; a=40;
int a=10; int b=20; int *pa=&a; int *pb=&b; int *const *ppa=&pa; ppa=&pb; *ppa=&b; //(錯誤) **ppa=b;const修飾在兩個*的中間,根據就近原則,我們知道const修飾的是*ppa,說明此時我們不可以改變ppa所指向的空間pa的內容的,但是我們可以修改ppa指針變量的本身,也可以修改二級指針ppa所指向空間a的值 3).const 放在第二個*的右邊
int a=10; int b=20; int *pa=&a; int *pb=&b; int **const ppa=&pa; ppa=&pb; //(錯誤) *ppa=&b; **ppa=b;const放在第二個*的右邊,根據就近原則,我們知道const修飾的是ppa,說明此時我們是不可以修改二級指針ppa指針變量本身的地址,我們可以修改二級指針ppa所指向空間pa和pa所指向空間a的內容 const修飾二級指針還有很多情況,上述只討論了只有一個const修飾的二級指針,只要把握要點,清楚const修飾的是什仫?二級指針本身?二級指針指向一級指針的內容?二級指針指向一級指針的地址?二級指針間接指向變量的內容?只要清楚了這些就可以很好的駕馭const修飾指針的問題了。
int a=10; const int &refa=a; refa=20; //(錯誤) a=20;2).const修飾變量的權限是可以縮小的但不可以擴大
const int a=10; int &refa=a; //(錯誤) int b=20; const int &refb=b;3).const修飾全局變量,該全局變量存放在只讀數據區,即使使用指針也無法修改該變量;定義時不一定分配空間在使用時才分配空間
const int n=10; //const修飾全局變量 int main() { int arr[n]; //只要說明n為常量也未分配空間 const int *p=&n; //此時才為n分配空間 system("pause"); return 0; }將const修飾的全局變量的地址給指針也就是使用時才分配地址 4).常量具有常性,只有常引用可以引用常量
int &refa=5; //(錯誤) const int &refb=5;5).引用的類型不匹配
double d1=3.1; const int &refd1=d1; //3 d1=6.95;
Date(const Date& d) :_year(d._year) ,_month(d._month) ,_day(d._day) {}
#define _CRT_SECURE_NO_WARNINGS 1 #include此時也就存在了下面幾個問題,這也是我們之前提到的const修飾變量的權限問題(權限可以縮小但不可以擴大) 1).const對象不可以調用非const成員函數,可以調用const成員函數 2).非const對象可以調用非const的成員函數,也可以調用const成員函數 3).const成員函數可以調用其他的const成員函數,不可以調用非const的成員函數 4).非const成員函數內可以調用其他的成員函數,也可以調用非const成員函數 這是我個人的一點小理解,如果有讀者知道有更多的用法請聯系我,本人郵箱[email protected]using namespace std; class Date { public: Date(int year,int month,int day) :_year(year) ,_month(month) ,_day(day) {} void Display()const { cout<<_year<<"-"<<_month<<"-"<<_day<
Android屏幕適配出現的原因在我們學習如何進行屏幕適配之前,我們需要先了解下為什麼Android需要進行屏幕適配。由於Android系統的開放性,任何用戶、開發者、O
三星Galaxy S6 Edge推出有一段時間了,受很多用戶的贊揚,不過再好的手機在使用的過程中也會出現一定的問題。比如數據連接問題,手機卡頓滯後問題,攝像
魅族MX6正式發布上線開賣了,很多買家都在猶豫買魅族pro6還是魅族MX6?那魅族pro6與mx6有什麼區別呢?魅族MX6配置怎麼樣呢?有什麼機身尺寸呢?正
繼續練習自定義View。。畢竟熟才能生巧。一直覺得小米的時鐘很精美,那這次就搞它~這次除了練習自定義View,還涉及到使用Camera和Matrix實現3D效果。一個這樣