2级问题 有以下程序 #include<stdio.h> void f(int *p); main() {int a〔5〕=

解释一下为什么这个是传值调用而不是传地址调用???
(29)有以下程序
#include<stdio.h>
void f(int *p);
main()
{int a〔5〕={1,2,3,4,5},*r=a;
f(r);printf(“%d\n”;*r);

void f(int *p)
{p=p+3;printf(“%d,”,*p);}
程序运行后的输出结果是
A)1,4 B)4,4 C)3,1 D)4,1
【答案与解析】D、本题考察函数值传递的问题。f函数参数为指针,容易让人误解为传址的问题,但实际上只是简单传值问题,调用后实参没有改变。故答案选D。(这是完整的)

第1个回答  2011-03-25
看不懂。。最好整个程序发上来追问

(29)有以下程序
  #include<stdio.h>
  void f(int *p);
  main()
  {int a[5]={1,2,3,4,5},*r=a;
  f(r);printf(“%d\n”;*r);
  }
  void f(int *p)
  {p=p+3;printf(“%d,”,*p);}
  程序运行后的输出结果是
  A)1,4    B)4,4    C)3,1   D)4,1

第2个回答  2011-03-25
答案选d
你调用的时候,传到函数f的是指针r的指针值,不是传递指针r的地址,如果要改为传递地址的话,应该这样:
void f(int **p) { *p = *p +3; },main中调用改为:f(&r); 当然,函数f的声明跟着一起改了就是了,这样的输出结果则是b本回答被提问者采纳

#include<stdio.h> void f (int *p); main() {int a[5]={1,2,3,4...
include<stdio.h> void f (int *p);void main(){ int a[5]={1,2,3,4,5},*r=a;f(r); \/\/将首地址a传给函数p printf("%d\\n",*r); \/\/由于是值传递,即将r的值传给p,但是没有改变r的值,\/\/此时*r的值既是a[0]} void f (int *p){ p=p+3; \/\/将p所指向的地...

#include<stdio.h> void f (int *p); main() {int a[5]={1,2,3,4...
41 f(r)把r指向的地址传给p,p加3后指向4的地址,但是r的值是不会被改变的,还是指向1

有以下程序#include <stdio.h> main() { int a[5]={2,4,6,8,10},*p...
首先p是一个变量,在*(p++)后p变量的值变化了,p变量的值指向数组中的a[1]即4,但是p的地址没有变,即k仍然指向p,所以k就可以通过p访问到a[1] = 4了。也就是刚开始k--->p--->a[0],在执行*(p++)后变成k--->p--->a[1];...

有以下程序#include<stdio.h> void fun(int *p,int *q) { t=*p;*p=...
回答:void fun(int *p,int *q) { int t;\/\/你这里怎么少了 t 定义了 t=*p;*p=*q;*q=t; \/\/这三个就已经实现数据交换了 *q=*p; \/\/你这里怎么又赋值一次了?? 可以删去 }

#include <stdio.h> void main () { int a[5]={1,2,3,4,5}; int *p...
这题的关键在int *ptr=(int *)(&a+1);这一句上,&a表示取得数组a存储区域的首地址,再加1表示数组a存储区域的后的地址,这就使得ptr指针指向数组的最后一个元素后面的那个存储单元的地址,而ptr减1后,再进行数据访问,则访问的是ptr指针的前一个存储单元的值,所有最后的答案是2,5 ...

#include<stdio.h> void main() { int p,a=5; if(p=a!=0) printf("%d...
条件 可以写成: if(p=(a!=0)) 这样看得清楚。里面是 赋值语句,(a!=0) 为真,真就是 1,(假才是 0)。p得1 ,条件真, 所以 执行 printf("%d\\n",p); 打印出 1。

C语言编程问题# include< stdio.h>main() {int a[5]=
其中s=0 下面 for(i=0; i<5;i++)s=s+[b[i]];是循环语句,从0到4,共执行五次,分别是s=s+b[0]=0+0;s=s+b[1]=0+2=2;s=s+b[2]=2+1=3;s=s+b[3]=3+3=6;s=s+b[4]=6+0=6;printf(''%d\/n'' , s);为输出语句,最后输出s 的值!即6 ...

#include <stdio.h> void main() { int i, a[5]; int *p=a; for (i...
include <stdio.h> \/\/这个是头文件 void main() \/\/这个是主函数 { int i, a[5]; \/\/定义一个变量,一个数组;int *p=a; \/\/这句话的意思就是取数组的首地址类似于 p=&a[0];for (i=0; i<5; i++,p++ ) \/\/对i变量的控制使他的值小于数组的长度5。p++;...

#include <stdio.h> void main() {int a[5]; a[5]={8,6,5,4,1}; {...
分析:int a[5];a[5]={8,6,5,4,1};错 int a[5]={8,6,5,4,1};对 原因是 :int a[5]定义了数组名为a ,数组长度为5的数组,a[5]={8,6,5,4,1};的a[5]它是数组的第六个元素,已超出数组长度,且你赋五个值(8,6,5,4,1)常用的初始化有以下几种 如:int a[5]...

#include<stdio.h> main() { int a[5],i ; int *p=a,t; for(i=0;i<...
你的程序不全,你试试这个程序吧。scanf的接收标准输入流的参数必须是一个地址。include<stdio.h> void main(){ int a[5],i,max;for(i=0;i<5;i++)scanf("%d",&a[i]);for(i=1,max=a[0];i<5;i++)if(max<a[i])max=a[i];for(i=0;i<5;i++)printf("a[%d]=%d\/n...

相似回答