C語言指針編程學習二

今天實際編程來理解下

例一:指針

static void learn_test(void)
{
    int a[4]={3,4};
    int *p1 = &a[0];
    int *p2 = &a[1];
    
    LOG_INFO("p1 = %d,p2 = %d",p1,p2);
    LOG_INFO("p2-p1 = %d",p2-p1);
    LOG_INFO("*p1 = %d,*p2 = %d",*p1,*p2);
}

打印出來是

 p1 = 536894608,p2 = 536894612
 p2-p1 = 1
 *p1 = 3,*p2 = 4

可以看出第一行打印的是p1,p2的地址,而第二行打印的p2-p1則是他們的地址相減後/a的數組長度的值,第三行打印的*p1,*p2則是其指向的內容的值。

例二:指針數組

  char *cp[] = { "ENTER", "NEW", "POINT", "FIRST" };
  char **cpp = cp;
    
   LOG_INFO("*cpp = %s",*cpp);
   LOG_INFO("*cpp+1 = %s",*cpp+1);
   LOG_INFO("*++cpp = %s",*++cpp);
   LOG_INFO("*++cpp+1 = %s",*++cpp+1);
   LOG_INFO("*cpp = %s",*cpp);
   LOG_INFO("*cpp = %s",*++cpp);

執行打印後:

  *cpp = ENTER
 *cpp+1 = NTER
 *++cpp = NEW
 *++cpp+1 = OINT
 *cpp = POINT
 *cpp = FIRST

第一行打印:指向指針數組的第一個元素

第二行打印:指向指針數組的第一個元素的第1個字符“N”

第三行打印:++cpp地址加1,指向“NEW”這個單元

第四行打印:++cpp地址從原來的cpp再加1,即從“NEW”的地址再加1,指向“POINT”單元,然後再+1,即到了“O”字符位置

第五行打印:顯示當前的地址下的元素是哪個,還是“POINT”這個元素

第六行打印:++cpp後,地址加1,到了“FIRST”,元素位置

 

 


 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章