多維數組與指針
指向一維數組的指針,定義格式為:
int *pa;
int a[5];
pa=a;
指向三維數組的指針,定義格式為:
int (*pa)[5][8]
int a[3][5][8];
pa=a;
從定義格式中我們看出,指向多維數組的指針,只有將第一維變成指針,后面的格式保持不變才能進行賦值。
指向二維數組的指針定義格式為:
int (*pa)[8];
int a[3][8];
pa=a;
※按照以上規律,如果函數之間要傳送一個多維數組,可用下面三種定義:
void fun ( int (*pa)[5][8],int n){…}
void fun ( int a[][5][8],int n){…}
void fun ( int a[3][5][8],int n){…}
再用以下方式調用:
int a[3][5][8]={0};
fun(a,3); // 只將第一維的元素值,傳值。 fun( a, 3) “ 3 ” 是:int a[3][5][8]
這樣理解可以簡化成按一維數組的傳送方式進行傳送。
指針的指針
每個變量都有地址,包括指針變量,如果要存儲指針變量的地址,那只能定義一個指針的指針,也叫雙重指針,如:
int **ppa,*pa;
ppa=&pa;
雙重指針一般和指針數組配合使用。
程序1
雙重指針
// 35-1雙重指針.c #include <stdio.h> main() { char *ca[] = { "aaa","bbb","ccc" }; // *ca[] == **ca char **pa = ca; //因為 *ca[] == **ca **pa = ca 不用& for (int i = 0; i < 3; i++) printf("%s\n", *pa++); // 分解: *pa pa++ }
※char **p={“aa”,”bbb”,”cccc”}非法,而char *ca[]={"aa","bbb","cccc"}合法。因為**p只能指向一個指針,而ca[]可以為字符串分配內存空間,它們道不同不相為謀。
注意:
※指針的指針不能直接指向多維數組,如:
int **ppa,a[3][3];
ppa=a;
這是不允許的
※“雙重指針不能定義字符串,不能指向二維數組”
main函數參數
Windows中有個“命令行模式”,源自於它的曾曾曾祖父操作系統“DOS”,在沒有鼠標的情況下,它可以通過給計算機發文字指令的方式來完成操作系統的大部分工作。
比如copy a.txt b.txt命令,會將文件a.txt復制到文件b.txt中去。


Windows命令是怎么做出來的。
main函數還有一種格式:
main(int argc,char *argv[]) //int argc負責接收字符串的個數,char *argv[]負責接收若干字符串。
根據“多維數組與指針”的概念,實際上main函數接收的就是一個字符串數組。int argc負責接收字符串的個數,char *argv[]負責接收若干字符串。
程序2
帶參數的main函數
// 35-2帶參數的main函數.c #include <stdio.h> main(int argc,char *argv[]) { int i = 0; printf("參數個數:%d\n", argc); while (i< argc) { //printf("%s\n", argv[i]); printf("%s\n", *(argv++)); //獲取數組參數 i++; } }

※字符串數組下標從0開始記數,文件名本身也算1個參數,如:copy a.txt b.txt中的copy也算1個參數,它的下標是0。
※中文和英文的編碼格式不同,因此在編程時為減少錯誤的發生,盡量少用中文。
