我昨天看书时有一处不懂就是,"int i,*p=&i;"-->"*p=&i"这个式子搞不懂,*p是一个值,相当于i,而&i则是个地址这个式子怎么成立呢?请帮我解释一下好吗?还有一道用指针编程的题:输入一个3*6的二维整型数组,输出其中最大值、最小值及其所在的行列下标。

热心网友

在*p=&i,在初始化是可以这样写,但是不能这样赋值!指针变量主要就是存地址! 指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值。未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址, 决不能赋予任何其它数据,否则将引起错误。在C语言中, 变量的地址是由编译系统分配的,对用户完全透明,用户不知道变量的具体地址。 C语言中提供了地址运算符&来表示变量的地址。其一般形式为: & 变量名; 如&a变示变量a的地址,&b表示变量b的地址。 变量本身必须预先说明。设有指向整型变量的指针变量p,如要把整型变量a 的地址赋予p可以有以下两种方式:(1)指针变量初始化的方法 int a;int *p=&a;(2)赋值语句的方法 int a;int *p;p=&a;不允许把一个数赋予指针变量,故下面的赋值是错误的: int *p;p=1000; 被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的找出其最大值和最小值,及它们的行列位置。采用按行按列顺序遍历数组的方法找出数组的最大值、最小值,以及它们在数组中的位置指针。输出时,将位置指针转换成行下标和列下标。程序如下: # include # define N 3 # define M 6 main() { int a[N][M],*maxp,*minp,*q,t; printf("输入%d个整数\n", N*M); for(q=a[0];q*q) minp=q; } printf("最大值:%d它的行下标是%d它的列下标是%d\n", *maxp,(maxp-*a)/M,(maxp-*a)%M); printf("最小值:%d它的行下标是%d它的列下标是%d\n", *minp,(minp-*a)/M,(minp-*a)%M; } 。

热心网友

int i,*p=&i;等价于:int i;int* p;p=&i;p是INT指针接收一个INT对象的地址。

热心网友

,*p是一个“指针变量”呀它的里边是“变量指量”也就是变量的指针至于这个式子怎么成立我想你看的书因该比我多