今天實際編程來理解下
例一:指針
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”,元素位置