int array[10] = {0,1,2,3,4,5,6,7,8,9},value; ... ... value = array[0];//也可以寫成 value = *array; value = array[3];//也可以寫成 value = *(array+3); value = array[4];//也可以寫成 value = *(array+4);
上例中,一般而言,數組名array代表數組本身,類型是int[10];如果把array看作指針的話,它指向數組的第0個單元,類型是int *,所指向的類型是數組單元的類型 int ,因此*array = 0 就一點也不奇怪了。同理,(array+3)指向數組單元的第三個指針,所以*(array+3) = 3 ;
char *str[3] = { "Hellp,this is a sample", "Hi ,good morning ", "Hello world" }; char s[80]; strcpy(s,str[0]);//也可以寫成 strcpy(s,*str); strcpy(s,str[1]);//也可以寫成strcpy(s,*(str+1));
上例中,str是一個三單元的數組,該數組的每個單元都是一個指針,這些指針每個都指向一個字符串,如果把數組名看作指針的話,它指向數組的第0號元素,類型是char** ,指向的類型是 char *;
*str 也是一個指針,它的類型是char*,指向的類型是char ,它指向的地址是字符串 “Hello,this is a sample”的第一個字符H的地址。*(str+1)也是一個指針,他的類型是char*,指向的類型是char,指向“Hi,good morning”的第一個字符H的地址。
在不同的表達式中,數組名array可以扮演不同的角色 。在表達式sizeof(array)數組名array 代表數組本身,故測出的是整個數組的大小。在表達式*array中,array扮演的是一個指針,所以該表達式就是數組第0號單元的值。sizeof(*array)測出的是數組單元的大小。表達式array+n,array扮演的是指針,故array+n也是指針,他的類型是type*,指向的類型是type,指向數組第n號單元,故sizeof(array+n)測出的是指針類型的大小。
struct mystruct { int a ; int b; int c; } mystruct ss = {20,30,40}; mystruct *ptr = &ss;//聲明了一個指向結構對象ss的指針,它的類型是myStruct * ,指向的類型是mystruct int *pstr = (int *)&ss//聲明了一個指向結構對象ss的指針。但是他的類型和它指向的類型和ptr是不同的,請問如何通過指針ptr來訪問ss的三個成員變量
答案:
ptr ->a; ptr ->b; ptr ->c; 請問如何通過指針pstr來訪問ss的三個成員變量 答案 *pstr; *(pstr+1); *(pstr+2);
這樣使用pstr來訪問結構成員是不正規的。那麼該怎麼樣來通過指針訪問數組的各個單元呢?
int array[3]={35,56,37}; int *pa = array; //通過指針pa訪問數組array的三個單元的方法是: *pa; *(pa+1); *(pa+2);
從格式上看倒是與通過指針訪問結構成員的不正規方法的格式一樣.所有的C/C++編譯器在排列數組的單元時,總是把各個數組單元存放在連續的存儲區裡,單元和單元之間沒有空隙。但在存放結構對象的各個成員時,在某種編譯環境下,可能會需要字對齊或雙字對齊或者是別的什麼對齊,需要在相鄰兩個成員之間加若干個“填充字節”,這就導致各個成員之間可能會有若干個字節的空隙。所以,在例十二中,即使*pstr訪問到了結構對象ss的第一個成員變量a,也不能保證*(pstr+1)就一定能訪問到結構成員b。因為成員a和成員b之間可能會有若干填充字節,說不定*(pstr+1)就正好訪問到了這些填充字節呢。這也證明了指針的靈活性。要是你的目的就是想看看各個結構成員之間到底有沒有填充字節,嘿,這倒是個不錯的方法。
整型數據,浮點型,字符型什麼的 這些都能很好理解撒。你每次遇到指針。就把它想成是和整型啊,字符型啊什麼的一樣的數據類型就行了,。它就是一種數據類型,懂。那是什麼類型呢,就是存儲數據地址的類型。存儲數據的地址。(舉個例子。你家的房子是數據,那你家的門牌號就是地址,指針就是存放你家門牌號的,)這很明白了吧,就像字符他只能存abc什麼的。。。。。。。。。。把指針兩個字換成地址 再理解就很好理解了。
用指針難,但是高效,就如:float類型它占4個字節,而指針永遠是兩個字節,使用它能提速,特別是什麼函數那些,呵呵。說實話,能上網,直接找課件,找關於指針這章的就是。路過。。。。舉例就不談了,想學就先看書的例子。(我覺得你像以前的我一樣,都覺得用指針都是浪費表情)放點耐心,指針是難點,花多點時間,對你有好處。。