const int MAX = 4;
int main ()
{
const char *names[] = {
"Zara Ali",
"Hina Ali",
"Nuha Ali",
"Sara Ali",
};
int i = 0;
for ( i = 0; i < MAX; i++)
{
//printf("Value of names[%d] = %p\n", i, &*names[i] );
//printf("Value of names[%d] = %p\n", i, &names[i] );
//printf("Value of names[%d] = %p\n", i, *names[i] );
//printf("Value of names[%d] = %p\n", i, names[i] );
}
return 0;
}
%p是将后面的变量按十六进制的地址格式输出。
&*names[i]相当于每个字符串第一个字符的地址,相当于字符串的首地址
&names[i]是每个字符串的首地址的地址。相当于names+i
*names[i]是每个字符串第一个字符
names[i]是每个字符串首地址
//printf("Value of names[%d] = %p\n", i, &*names[i] );
names[i]就是字符串的首地址,比如names[0]就是字符串"Zara Ali"的地址
&*names[i]是字符串第一个字母的地址,跟字符串的地址是一样的。比如,&*names[0]得到的就是字符Z的首地址,这个地址跟字符串"Zara Ali"的首地址是一样的。
const char *names[] 首先这是一个常量字符指针数组,数组的元素是字符串
&*names[i] 如果i = 0,则这个表示第一个元素的地址
&names[i] 如果i = 0, 则这个表示存放第一个字符串地址的地址
*names[i] 如果i = 0,则这个表示,第一个元素的第一个字符
names[i] 如果i = 0, 则这个表示第一个元素的地址