第4个回答 2009-03-21
指针本身保存的是被指向对象的地址值。字符数组是在栈上分配的常量指针,也就是说char str[20]系统在栈上分配一片大小20个char占用大小的内存,并将这片内存的首地址赋给str,并且str的值是不可以改变的。
而p = str;一句实际上编译器在编译时执行了隐式类型转换,将常量char指针str转换为char指针。在执行这个语句后,p本身的值和str相同,也就是说p和str指向了栈上的同一片内存。
------------------------
所以:
B str与p的类型完全相同 //错,str是常量char指针,p是char指针
C str 数组长度和p所指向的字符串长度相等 //错,数组长度是20,但是字符串长度只有8,包含'\0'
D 数组str中存放的内容和指针变量p中存放的内容相等 //数组str中前八个字节保存的是'P','r','o','g','r','a','m','\0'另外十二个字节可能根据不同情况有不同的值。而p中只是存放一个地址值。