來源:互聯網網民 2010-04-07 23:38:40
評論分類: 電腦/網絡 >> 程序設計 >> 其他編程語言
問題描述:#include <stdio.h>
void chang(int *pt1,int *pt2);
main()
{
int *p1,*p2,a,b;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
chang(p1,p2); //問題1:這裏p1是指針變量,但爲什麽可以將p1賦值給形參的*pt1呢??
p1不是表示&a馬?
printf("%d,%d\n",*p1,*p2);
}
void chang (int *pt1,int *pt2) //問題2:*pt1在這裏表示什麽意思?它表示是&a還是表示a這個變量呢??
{
int t;
if(*pt1<*pt2)
{
t=*pt1; //問題3:這裏的*pt1和形參的*pt1意思是一樣的馬??
*pt1=*pt2; //問題4:*pt1不是應該表示一個變量馬??不是說子程序內的改變並不影響主函數中的
數值馬??
*pt2=t;
}
return;
}
/*如果我把上面的調用的東西改成
void chang (int *pt1,int *pt2)
{
int *t;
if(*pt1<*pt2)
{
t=pt1;
pt1=pt2;
pt2=t;
}
return;
}
問題5:爲什麽輸出時還是不變呢?
是不是在調用中子程序的時候只有指針和數組下標可以改變,而數值的話就不可以改變呢??謝謝!希望各位高手能一一回答我的問題,謝謝!*/
參考答案:你不要把int* pt1看成int和*pt1啊,int*表示聲明一個整型指針,int* pt1就表示pt1是一個整型指針。
*pit就表示一個整型了。記住有星號表示值,沒有星號表示指針。
用指針調用會把內存的東西改了的,p1,p2都是地址,*p1,*p2就是在p1,p2那位置開始的單元所記錄的一個整型的值,把地址傳進函數,然後改了內存單元的內容,*p1,*p2當然就變了啦。
t=pt1;
pt1=pt2;
pt2=t
這三句只是改了指針的指向,且t,pt1,pt2都是局部變量,一點意義都沒有。
函數結束後*p1和*p2的內容根本沒有改變。
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
[b]分类:[/b] 电脑/网络 >> 程序设计 >> 其他编程语言[br][b]问题描述:[/b][br]#include <stdio.h>
void chang(int *pt1,int *pt2);
main()
{
int *p1,*p2,a,b;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
chang(p1,p2); //問題1:這裏p1是指針變量,但爲什麽可以將p1賦值給形參的*pt1呢??
p1不是表示&a馬?
printf("%d,%d\n",*p1,*p2);
}
void chang (int *pt1,int *pt2) //問題2:*pt1在這裏表示什麽意思?它表示是&a還是表示a這個變量呢??
{
int t;
if(*pt1<*pt2)
{
t=*pt1; //問題3:這裏的*pt1和形參的*pt1意思是一樣的馬??
*pt1=*pt2; //問題4:*pt1不是應該表示一個變量馬??不是說子程序內的改變並不影響主函數中的
數值馬??
*pt2=t;
}
return;
}
/*如果我把上面的調用的東西改成
void chang (int *pt1,int *pt2)
{
int *t;
if(*pt1<*pt2)
{
t=pt1;
pt1=pt2;
pt2=t;
}
return;
}
問題5:爲什麽輸出時還是不變呢?
是不是在調用中子程序的時候只有指針和數組下標可以改變,而數值的話就不可以改變呢??謝謝!希望各位高手能一一回答我的問題,謝謝!*/[br][b]参考答案:[/b][br]你不要把int* pt1看成int和*pt1啊,int*表示聲明一個整型指針,int* pt1就表示pt1是一個整型指針。
*pit就表示一個整型了。記住有星號表示值,沒有星號表示指針。
用指針調用會把內存的東西改了的,p1,p2都是地址,*p1,*p2就是在p1,p2那位置開始的單元所記錄的一個整型的值,把地址傳進函數,然後改了內存單元的內容,*p1,*p2當然就變了啦。
t=pt1;
pt1=pt2;
pt2=t
這三句只是改了指針的指向,且t,pt1,pt2都是局部變量,一點意義都沒有。
函數結束後*p1和*p2的內容根本沒有改變。