程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C語言指針學習(續),c語言指針

C語言指針學習(續),c語言指針

編輯:C++入門知識

C語言指針學習(續),c語言指針


五、數組和指針的關系

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)就正好訪問到了這些填充字節呢。這也證明了指針的靈活性。要是你的目的就是想看看各個結構成員之間到底有沒有填充字節,嘿,這倒是個不錯的方法。

 


c語言指針學習一直搞不懂

整型數據,浮點型,字符型什麼的 這些都能很好理解撒。你每次遇到指針。就把它想成是和整型啊,字符型啊什麼的一樣的數據類型就行了,。它就是一種數據類型,懂。那是什麼類型呢,就是存儲數據地址的類型。存儲數據的地址。(舉個例子。你家的房子是數據,那你家的門牌號就是地址,指針就是存放你家門牌號的,)這很明白了吧,就像字符他只能存abc什麼的。。。。。。。。。。把指針兩個字換成地址 再理解就很好理解了。
 

C語言指針學習

用指針難,但是高效,就如:float類型它占4個字節,而指針永遠是兩個字節,使用它能提速,特別是什麼函數那些,呵呵。說實話,能上網,直接找課件,找關於指針這章的就是。路過。。。。舉例就不談了,想學就先看書的例子。(我覺得你像以前的我一樣,都覺得用指針都是浪費表情)放點耐心,指針是難點,花多點時間,對你有好處。。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved