指针的一个问题,求详解

设有定义:int a,*pa=&a;,以下scanf语句中能正确为变量a读入数据的是( )。答案:D
A、scanf("%d",&pa);
B、scanf("%d",*pa);
C、scanf("%d",a);
D、scanf("%d",pa);

int a,*pa=&a; 这是声明。声明里 *pa 是指针。
声明 int 型 变量 a。
声明 int 型 指针 pa, 并初始化 -- 让它指向 变量 a 的地址。

scanf(...) ; 是 语句。
语句里 *pa 是指针 指向的 值。
语句里 pa 是指针 指向的 地址。
语句里 a 是变量a 的 值。
语句里 &a 是变量a 的 存储地址。
语句里 &pa 什么都不是,它有语法错误。

scanf("%d",...); 语句,
小括号里, 第一部分 是 输入 格式描述,%d 是 按10进制整型 格式输入。
小括号里, 第二部分 是 输入数据 进 某地址,要求 添 变量的地址,或指针指向的地址。
A,pa 什么都不是,有语法错误。所以不对。
B,语句里,*pa 是指针 指向的 值,不是 指针指向的地址。所以不对。
C,语句里,a 是变量a 的 值。也不符合 要求。所以不对。
D, 语句里,pa 是指针 指向的 地址, 符合 要求,正确答案 选它。

上面特别强调了 声明 和 语句。这是因为 外貌相似的东西,在声明里 和 在 语句里 意义不同。例如,
声明里 *pa=&a; -- 把a的地址赋给 pa.
语句里要写 pa = &a -- 把a的地址赋给 pa.
语句里要写 *pa = a -- 把a的值赋给 pa.
遇到 char *pa; 则更烦人。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-26
scanf语句要求在后面提供一个整型数据存储区的地址。
A.&pa错,变量pa存放的是一个地址,地址本身并不是整型数据,输入后的数据当作地址数据存放到变量pa中将会导致pa指向的存储区有可能指向系统内存的错误地址,会给下一步pa的使用造成麻烦;
B.*pa错,*pa就是pa指向存储区(a)的值,这是个整型值而且还未给a赋过值,拿a存放的数据当成一个地址来用这是有问题的,这个指针是“野”指针;
C.a错,这同B的情况相同,a的值就是*pa
D.pa正确,pa正是一个指向整型存储区的指针,而且它已经被赋值指向变量a,输入的整型数据将存放到变量a的存储区中。本回答被网友采纳
第2个回答  2013-09-26
int a,*pa=&a;这一句可以分解为:
int a;
int *pa;
pa=&a;
在scanf函数获取整数时候,需要一个证书的地址,也就是int *类型的,满足int *类型的只有 &a和pa
故选择D
第3个回答  2013-09-26
d
scanf索要输入的是一个变量的地址
那么bc都不对
a选项中要输入a,那么就要a的地址,但是&pa是pa的地址,所以不对

指针的一个问题,求详解
int a,*pa=&a; 这是声明。声明里 *pa 是指针。声明 int 型 变量 a。声明 int 型 指针 pa, 并初始化 -- 让它指向 变量 a 的地址。scanf(...) ; 是 语句。语句里 *pa 是指针 指向的 值。语句里 pa 是指针 指向的 地址。语句里 a 是变量a 的 值。语句里 &a 是变...

关于指针的一个问题,希望大家能踊跃帮忙
第一种pvar指向的变量为不可写,就是说不能改变。第二种pvar不能重新指向其他的变量。

C语言关于指针变量中**a的问题。 求详解
int *a[2] 表示一个指针数组,及a[1],a[2]都各自是一个指针,当直接打a 表示的是这个数组的首地址,*a表示的是取得就是a的首地址里面的内容,相应的就是a[1],而a[1]也是指针,可以再对起取内容,及*a[1],前面说过*a等价于*a[1],所以也可以写作:**a....

C++ 指针的引用问题
至于this,是个特殊的指针,一般我们自己定义的指针会分配一个内存空间,比如32位的地址会分配4字节的指针变量空间。然后指针赋值时,将某变量或对象的地址存入。但是this是编译器确定的常量地址,this指向对象地址,它本身是对象内部的相对偏移量,当然没有地址,所以无法引用。一般基类指针和派生类指针不一...

当指针指向10时,当前X Y的坐标,请高手详解!计算公式与方法说明(详细...
求弧形曲线的方程,以半圆圆心为原点,50向上为X轴,100向右为Y轴.x^2+y^2=5^2;指针指向10时,Y=r*sin18度=5*0.309=1.545;X=-r*cos18度=-4.755

求解指针、指针(变量)的值、指针指向的地址的值的区别,求大侠详解
首先从形式上讲一下。int a=1,x1,x2;int *p;\/\/这里定义了一个指针,但是他没有指向任何变量。p=a; \/\/现在指针指向了变量a,a的值就是指针变量的值,x1=*p;\/\/*是取值符,作用就是取p此时指向的变量的值,由于在上面一步中我们已经把指针指向a,a的值就是指针变量的值,所以x1的值就是a...

求大神详解,怎么判断电流计指针偏转方向!
指针偏转如图①所示;冲动继续传导,b处恢复静息电位,膜外电位为正,指针则恢复为图②所示;当冲动传导至a电极处,a处膜外电位变为负,指针偏转如图③所示,一段时间后a处恢复为静息电位,如图②。因此电流计指针偏转顺序为①→②→③→②,电流计指针发生两次方向相反的偏转,故本题正确答案为B。

C语言选择题,关于指针数组。求详解
int a[2][3]; 定义了一个二维函数,每一维数组有三个元素。int (*pt)[3]; 定义了一个数组指针,也就是定义了一个指向有三个元素的指针,即该指针,每次自加1,地址跳过三个int pt=a; 就是让pt指向a[0],注意a[0]是一个数组地址,里面有三个元素 对于A选项,pt[0][0]是正确的,...

C语言问题,求详解 特别是(*ptr)[2]是什么意思,
2:int (*ptr)[2] 解释为:声明一个指针ptr,这个指针是个什么样的指针呢?是一个指向一个数组的指针。这个数组是个什么样的数组呢?是一个包含了两个元素,并且元素为int型的数组。于是ptr连起念就是:ptr为一个指向了数组元素个数2个,类型为int型的数组指针。3:你程序中ptr++,多余了,...

7.12如果p1和p2都是指向int型的指针,n为int型数,则下列表达式中哪些是...
这与指针指向的数据类型有关,是以数据类型占用的内存大小作为步进的基数,就像住户的房子修得大点,那你隔相同的号数走得也要远点。n+p计算机也是当p+n来操作的。它看到p是指针,就认为你是对它在进行步进。而n-p相当于对一个地址取负,计算机认为负的地址是不存在的,于是报错。

相似回答
大家正在搜