一、学习笔记(观看内容:MOOC——C程序设计——1.1.4 指针与数组;1.2.1 指针运算)
二、相关程序
三、存在问题
1.判断:语句int *p
和printf("%d",*p);
中的*p含义相同。(F)
解析:前者表示指针变量,后者表示取指针指向变量的值。
2.若有说明:int n=2,p=&n,q=p;则以下非法的赋值为( D)。
B.p=q; C.n=*q;
问题:选项A,B中p与p的区别是什么?
努力:通过百度搜原题,只查到类似问题:
若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是( )。
A.p=q;
B.*p=*q;
C.n=*q;
D.p=n:
3.判断题:若有定义int a[]={2,4,6,8,10},*p=a;a的值是数组首地址,则**(p+1)的值是4。( F )
[Error] invalid type argument of unary '*' (have 'int')
[错误]无效类型参数的一元'*'(有'int')
改正:*(p+1)= 4
4.本程序在数组中同时查找最大元素和最小元素的下标,分别存放在函数main()的max和min变量中。
#include <stdio.h>
void find(int *, int, int *, int *);
int main(void)
{
int max, min, a[]={5,3,7,9,2,0,4,1,6,8};
find( a,10,&max,&min );
printf("%d,%d ", max, min);
return 0;
}
void find(int *a, int n, int *max, int *min)
{
int i;
*max=*min=0;
for (i = 1; i < n; i++)
{
if (a[i] > a [*max]) *max=a[i] ;
if (a[i] < a [*min]) *min=a[i] ;
}
}
问题:在DEVC++中经过编译,程序正常运行,结果正确,但为什么在PTA上显示部分错误?
5.若变量已正确定义并且指针p已经指向某个变量x,则(*p)++相当于____。
- p++
- x++
- *(p++)
- &x++
解析:*p相当于x,(*p)++相当于x++