做个实验,打消你的疑虑
代码:
#include "stdio.h"
#include "仔昌conio.h"
main()
{
int a[5]={1,2,3,4,5}
int *p=&a[0]
printf("p=%d\n",p)
printf("*(p+3)=%d,p+3=%d\n",*(p+3),p+3)
printf("p=%d\n",p)
getch()
}
运行结果
p=2293584
*(p+3)=4,p+3=2293596
p=2293584
p的地址没有改变的。中间是p+3后圆纤所指向的数组元素和地址
楼主好运!
结果是:Please
input
a
string:The
result
is:
0
0
0
0
0
从main函数开始执行,
遇到printf语句后输出Please
input
a
string:
这时你输入This
is
a
tree并赋给s
然后调用fun函数
此函数调用过程是:因为数组名就是数组的首地址,这时实参是把s数组的地扯传给了形参s的,
num传的也是数组的首地址,所以接下来如果在fun函数中对他们俩进行了修改的亩则话,
实际的参数也是同时进行了修改的.
第一个for语句将数组元素都设为0
因为此时的s是指向"This
is
a
tree"这个字符数组的首地址,
其*s就是'T',当然不等于'\0'.所以此时会让i=-1.
刚说了*s是‘T’,所以它不与switch中任何一种情况相同。
所以它不会执行swihch中的语句。后面的if语句不成立。因为i=-1。
最后s++,s这时指向数组下一个元素,即‘h’。
函数调完后,接着执行下一条printf语句,输出The
result
is:并回车
因为数组里的元素在fun函数中改过了,都是0。所以输出的都坦扮就迅信棚是五个0了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)