有函数原型为void f(int,int *);主函数中有变量定义:int a,*p=&a,b[10];则下列几种调用错误的是:
A·f(a,p) B·f(*p,b) C·f(b,&a) D·f(*p,p)
我的想法是:子函数要接收一个整形变量,一个指针变量,那么B选项中b不是指针常量么?
求助大神们解答!谢谢!
答案是C
C
B中 b 是数组名,可以看作 const 的指针
C中第一个参数是b,但实际参数是 int
B 选项中的b不是常量,而是数组 ,这道题你可以用排除法做,那样就会容易的多!
这是个比较简单的指针问题
选项A 一目了然 不解释 正确
选项B f(*p,b)
p是整形指针变量, 定义时 用int* , P里面就可以放int形的变量地址了, printf("%d", p) 打出来的就是p里放的地址, p就是p里的地址所指向的
变量的值, printf("%d", *p) 可以看到变量的值, 所以选项B正确
选项C b[10]数组, b表示数组的首地址,b[1]表示第一个元素的值, b[1]也可以用(b+1)来取得,所以b是首地址,1是地址向后偏移移位,因为数组C语言中定义在栈区,可以简单的用指针地址+偏移量 所以C想错误
选项 D 正确 不解释
数组名是指向数组第一个成员的指针,这个是基本概念