先看代码:
#include <stdio.h> int main(void) { ] = "; char * strTmp = "abcdefg"; int i; printf(]); printf("day is %p\n", day); printf("\n&strTmp is %p\n", &strTmp); printf(]); printf("strTmp is %p\n", strTmp); ; }
运行结果:
&day[0] is 0018FF40
day is 0018FF40
&strTmp is 0018FF3C
&strTmp[0] is 00422FFC
strTmp is 00422FFC
分析:
char day[7] = "1234567";
相当于:
char day[7];
char[0] = ‘1’;
char[1] = ‘2’;
char[2] = ‘3’;
char[3] = ‘4’;
char[4] = ‘5’;
char[5] = ‘6’;
char[6] = ‘7’;
//注: 这里没有 ‘\0’
图解:
day[0] 相当于 *day (day是char类型的指针,存放着day[0]的地址,也就是 1000H)//既然 *day == day[0] 那么day中存储的值可能是 day[0] 的地址 所以 day == &day[0]
day[1] 相当于 *(day+1)
...
day[6] 相当于 *(day+6)
分析:
char * strTmp = "abcdefg";
首先,strTmp是char类型的指针,里面存放的是 地址. 而 strTmp这个指针本身也有地址
&strTmp 就是这个指针的地址
另外, strTmp[0] == *strTmp
所以可以看出 strTmp存放的是 strTmp[0]的地址
所以 strTmp == &strTmp[0]
下面是strTmp的值和地址(在vc++6.0 32位系统中测试 不同机器的结果可能不一样)
字符串的值和地址 (注意看字符串首地址 和 strTmp的值)