我昨天看書時有一處不懂就是,"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是一個“指針變量”呀它的里邊是“變量指量”也就是變量的指針至于這個式子怎么成立我想你看的書因該比我多