首先怀疑你的程序有笔误,估计你把point( p ) 写成了 point()了
这样的话,你的题目就变成这样了.
----------------------------------------------------------------------
point(char *p)
main()
{
char b[4]={‘a',‘b',‘c',‘d’},*p=b;
point( p );
printf(“%c\n”,*p);
程序运行结果是:?
----------------------------------------------------------------------
先简单说明一下指针:指针就是变量的地址。如char *p;这个p就是一个指针(地址)。*p就是这个地址里放的变量(字符)
这个问题的关键在point(char *p)这个函数,其中(char *p)的p为形参(就是形式的参数)。可以把这个函数改为point(char *tmp_p)结果是一样的,但是更容易理解了。
在main函数中,p=b。而b是一个数组名,b也是{‘a',‘b',‘c',‘d’}这个数组的首地址。这个首地址里放的字符就是‘a’,所以*p就是‘a’。调用point( p );后p的值没有任何变化,所以说*p是‘a’;为什么说调用point( p );后,p没有任何变化呢?
前面把point(char *p)改为point(char *tmp_p)了。
其实调用point(tmp_p);的过程是这样的:
tmp_p = p;
tmp= tmp+3;
这样可以看出变化的是tmp, p没有任何变化。所以p这个地址没有变,所以p这个地址(也就是说数组b的首地址)里放的还是‘a’。
另外,tmp_p这个变量的生存周期就是point( p )函数的执行周期。关键要明白main函数中的p和point(char *p)中的p不是一个指针(变量),是两个指针(变量)。在调用point( p )函数的时候把main中的p赋值给了point(char *p)中的p。
首先怀疑你的程序有笔误,估计你把point( p ) 写成了 point()了
这样的话,你的题目就变成这样了.
----------------------------------------------------------------------
point(char *p)
main()
{
char b[4]={‘a',‘b',‘c',‘d’},*p=b;
point( p );
printf(“%c\n”,*p);
程序运行结果是:?
----------------------------------------------------------------------
先简单说明一下指针:指针就是变量的地址。如char *p;这个p就是一个指针(地址)。*p就是这个地址里放的变量(字符)
这个问题的关键在point(char *p)这个函数,其中(char *p)的p为形参(就是形式的参数)。可以把这个函数改为point(char *tmp_p)结果是一样的,但是更容易理解了。
在main函数中,p=b。而b是一个数组名,b也是{‘a',‘b',‘c',‘d’}这个数组的首地址。这个首地址里放的字符就是‘a’,所以*p就是‘a’。调用point( p );后p的值没有任何变化,所以说*p是‘a’;为什么说调用point( p );后,p没有任何变化呢?
前面把point(char *p)改为point(char *tmp_p)了。
其实调用point(tmp_p);的过程是这样的:
tmp_p = p;
tmp= tmp+3;
这样可以看出变化的是tmp, p没有任何变化。所以p这个地址没有变,所以p这个地址(也就是说数组b的首地址)里放的还是‘a’。
另外,tmp_p这个变量的生存周期就是point( p )函数的执行周期。关键要明白main函数中的p和point(char *p)中的p不是一个指针(变量),是两个指针(变量)。在调用point( p )函数的时候把main中的p赋值给了point(char *p)中的p。
7、c
8、d
10、A
11、C
C
D
A
C
7 C 8 D 10 A 11 C