回顧指針概念:
1. 程序如下聲明變量
short int i;
char a;
short int *p;
2. 程序在內存某地址空間上為各變量開辟空間,如下所示:
從圖中可以看出
i變量在內存中的起始地址是5,占2個字節,即:5、6。
a變量在內存中的起始地址是7,占1個字節,即:7。
p變量在內存中的起始地址是11,占4個字節,即:11、12、13、14。
3. 賦值如下:
i = 50;
p = &i;
變量的內存如下:
 #include <stdio.h>
void find1(char array[], char search, char *p);
void find2(char array[], char search, char **pp);
int main(void)
{
char str[] = "afsdfsdfd\0";
char a = 'd';
char *pa = NULL;
//find1(str, a, pa);
find2(str, a, &pa);
if ( pa == 0)
{
printf("沒找到!\n");
}
else
{
printf("找到了,pa = %#x\n", pa);
}
return 0;
}
void find1(char array[], char search, char *p)
{
int i;
for (i = 0; *(array + i) != 0; i++)
{
if (*(array + i) == search)
{
p = array + i;
break;
}
else if (*(array + i) == 0)
{
p = 0;
break;
}
}
}
void find2(char array[], char search, char **pp)
{
int i;
for (i = 0; *(array + i) != 0; i++)
{
if (*(array + i) == search)
{
*pp = array + i;
break;
}
else if (*(array + i) == 0)
{
*pp = 0;
break;
}
}
}
/********************************************************************
函數定義處:void find1(char array[], char search, char *p)
函數調用處:find1(str, a, pa)
對形參p的修改並不會改變實參pa的值,因此pa的值沒有改變,還是初始化時的0。
找到了,pa = 0x12ff77
注意:printf("%#x",pa); #是使輸出數據前面帶0x,x是以十六進制方式輸出。
********************************************************************/