蛇形數組:
//蛇形函數問題
#include<stdio.h>
#include<string.h>
void main()
{
int i = 0,n,k = 1;
printf("請輸入N:");
scanf("%d",&n); //
int j = n-1,s[100][100];
memset(s,0,sizeof(s)); //記憶體初始化
while(k<=n*n)
{
while(i<=n-1&&s[i][j]==0&&k<=n*n) {s[i++][j] = k++;}
i--;//不然的話上面一行i++之後越過邊界了
j--;//不然會覆寫邊角的那個數
while(j>=0&&s[i][j]==0&&k<=n*n) {s[i][j--] = k++;}
j++;
i--;
while(i>=0&&s[i][j]==0&&k<=n*n) {s[i--][j] = k++;}
i++;
while(j<=n-1&&s[i][j]==0&&k<=n*n) {s[i][j++] = k++;}
j--;
}
//列印輸出
for(int x = 0;x<n;x++)
for(int y = 0;y<n;y++)
{
if(s[x][y]<10)
printf("%d ",s[x][y]);
else
printf("%d ",s[x][y]);
}
printf("\n");
}
結果:
const和define的差別:
define不需要指名類型,const隻讀不能修改。const 要做類型判斷
const char *p;
char const *p;
p指向可以改,*p不可改
char * const p="abc"; *p可以改,但這兒不可改,是在靜态區,初始化必須指向,不然會報錯
char const * const p="abc" ; p不可改,*p也不可改
const資料開辟在靜态區,在編譯的時候就開辟空間了
引用:int &a=5; 是錯誤的 就類似: int *p=&5; 錯誤
别名是唯一的,一旦起了别名就不可以更改
引用和指針的差別:
1.從記憶體上來講 系統為指針分寸記憶體空間,而引用與綁定的對象共享記憶體空間,系統不為引用變量配置設定内容空間。
2指針初始化以後可以改變指向的對象,而引用定義的時候必須要初始化,且初始化以後不允許再重新綁定對象。
3.是以引用通路對象是直接通路。指針通路對象是間接通路。
4。如果pa是指針,那麼*pa就是引用了。
但是兩者在作為形參的時候非常相似,差別是指針拷貝副本,引用不拷貝。程式如下:
void pt(int * pta,int * ptb)
int *ptc;
ptc=pta;pta=ptb;ptb=ptc;
void ref(int &ra,int &rb)
int rc;
rc=ra;ra=rb;rb=rc;
int a=3;int b=4;
int *pa=&a;int *pb=&b;
pt(pa,pb);
printf("zhizhen: a=%d,b=%d\n",a,b);
ref(a,b);
printf("yinyong: a=%d,b=%d\n",a,b);
const和static差別
const int i=10; //i不可以更改
static int a=10;//可以更改 隻初始化一次
如果把const放在變量類型名前,說明這個變量的值是保持不變的,該變量必須在定義時初始化,初始化後對它進行的任何指派都是非法的。
将static用于一個全局變量,是說明該全局變量隻對定義在同一個檔案中的函數可見。即使在另一個檔案中使用了extern,另一個檔案中的函數也不能通路這個全局變量。
static的第二個含義是用于一個函數前,說明該函數隻能在同一個檔案中調用。
第三個含義是static用于函數的局部變量。它表明該變量的值不會因為函數終止而消失,它會被儲存下來。再次調用該函數時,這個儲存下來的值會用來初始化該變量。
第四個含義就是用于類的成員變量。它表明對類的所有對象,這個資料成員都隻有一個執行個體。這個執行個體被所有對象共有。static的成員變量可以是private、public、protected的。定義和通路的文法也和其他資料成員一樣。
定義類不占存儲空間,隻是定義了類型。
本文轉蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366567,如需轉載請自行聯系原作者