正在加载图片...
则不能表示a数组元素的表达式是 A)*p B)a[10] C)*a D)alpal 分析:这是1998年4月的一道选择题。选项A)和C)可以该写为:*(p+0)和*(a+0),所 以它们均表示数组元素a[0]。选项D的下标为pa,由于p和a均指向数组的首地址, 它们的地址值是相同的,所以p-a的值为0,所以a[p-a]也表示a[0]。选项B)的下标 10超出了数组所规定的上限9,所以,a[10]不能表示a数组的一个元素。 例题三:若有以下定义和语句,则使指针p指向值为36的数组元素的表达式是 inta[10]={19,23,44,17,37,28,49,36},* p-a 分析:这是1997年9月的一道填空题,与例题一完全类似。正确答案是*(p+7)。 例题四:若有说明: double*p,a;则能通过 scanf语句正确给输入项读入数据的程序 段是 A)*p=&a: scanf( %lf", p) B)p=(double *)malloc(8): scanf(%f p C)p=&a: scanf(%lf", a) D)p=&a: scanf(%le", p) 分析:这是1997年9月的一道选择题。它是关于指针与单个变量之间关系的题目 (1)要使指针p指向变量a,则必须用语句pa;这样以后,也有两个等价关系: *p等价于a:p等价于&a。 前者是关于变量a的数值的等价关系,后者是关于变量a的地址值的等价关系 (2)选项A)中的语句*p=&a:显然是错误的。选项B)在程序运行到 scanf语句时将出错 选项C)的 scanf语句中的a前面少了一个取地址符&。选项D相当于 scanf("%le",&a); 因此是正确的 例题五:若有以下定义 inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为3的表达式是 A)p+=2,*(p++)B)p+=2,*++p D)p+=2,+ 分析:这是1998年4月的一道选择题,它还涉及到指针的移动以及运算符++和*之间的 优先级问题 (1)首先确定,值为3的数组元素是a[2],因此也可用p[2],*(a+2)和*(p+2)表示 (2)题目的4个选项中没有现成答案,所以再考虑其它途径。注意4个表达式均为逗号 表达式,它们的值应该分别等于各自最后一个表达式的值(关于逗号表达式,可参阅本 站“逗号表达式”专题) (3)再看表达式p+=2的作用。在进行这一运算之前,指针p指向数组元素a[0],表达式 p+=2使指针p向后移动了2个存储单元,也即,运算后指针p指向了数组元素a[2], 同样,经过p+3运算后,指针p将指向数组元素a[3]。则不能表示 a 数组元素的表达式是 A) *p B) a[10] C) *a D)a[p-a] 分析:这是 1998 年 4 月的一道选择题。选项 A)和 C)可以该写为:*(p+0)和*(a+0),所 以它们均表示数组元素 a[0]。选项 D)的下标为 p-a,由于 p 和 a 均指向数组的首地址, 它们的地址值是相同的,所以 p-a 的值为 0,所以 a[p-a]也表示 a[0]。选项 B)的下标 10 超出了数组所规定的上限 9,所以,a[10]不能表示 a 数组的一个元素。 例题三:若有以下定义和语句,则使指针 p 指向值为 36 的数组元素的表达式是 int a[10]={19,23,44,17,37,28,49,36},*p; p=a; 分析:这是 1997 年 9 月的一道填空题,与例题一完全类似。正确答案是*(p+7)。 例题四:若有说明:double *p,a;则能通过 scanf 语句正确给输入项读入数据的程序 段是 A) *p=&a;scanf("%lf",p); B) p=(double *)malloc(8);scanf("%f",p); C) p=&a;scanf("%lf",a); D) p=&a;scanf("%le",p); 分析:这是 1997 年 9 月的一道选择题。它是关于指针与单个变量之间关系的题目。 (1)要使指针 p 指向变量 a,则必须用语句 p=&a;这样以后,也有两个等价关系: *p 等价于 a;p 等价于&a。 前者是关于变量 a 的数值的等价关系,后者是关于变量 a 的地址值的等价关系。 (2)选项 A)中的语句*p=&a;显然是错误的。选项 B)在程序运行到 scanf 语句时将出错。 选项 C)的 scanf 语句中的 a 前面少了一个取地址符&。选项 D)相当于 scanf("%le",&a); 因此是正确的。 例题五:若有以下定义: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为 3 的表达式是 A) p+=2,*(p++) B) p+=2,*++p C) p+=3,*p++ D)p+=2,++*p 分析:这是 1998 年 4 月的一道选择题,它还涉及到指针的移动以及运算符++和*之间的 优先级问题。 (1)首先确定,值为 3 的数组元素是 a[2],因此也可用 p[2],*(a+2)和*(p+2)表示。 (2)题目的 4 个选项中没有现成答案,所以再考虑其它途径。注意 4 个表达式均为逗号 表达式,它们的值应该分别等于各自最后一个表达式的值(关于逗号表达式,可参阅本 站“逗号表达式”专题)。 (3)再看表达式 p+=2 的作用。在进行这一运算之前,指针 p 指向数组元素 a[0],表达式 p+=2 使指针 p 向后移动了 2 个存储单元,也即,运算后指针 p 指向了数组元素 a[2], 同样,经过 p+=3 运算后,指针 p 将指向数组元素 a[3]
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有