回答問題1:
妳有編譯器嗎?肯定有吧,那把下面的代碼運行遍。代碼的運行結果見附圖。
#include<stdio.h>
#include?<windows.h>
void?fun(char?*s)
{
while(*s) {? char?ch='s'; printf("%c進來了,它的ASCII碼為%d\n",*s,*s); system("pause"); if(*s%2==0)? {printf("%c",*s);
} s++; }}
void?main()
{?
char?a[]={"good"}; fun(a); printf("\n"); system("pause");}
回答問題2:
說實話,當初我的指針也學得混混沌沌,所以不敢保證我的解釋正確的。
首先進入源程序的定義:
int?x=3,y=5,*p=&x,*q=&y;
即指針p指向x的地址,y指向q的地址,我們假設p=0000001h這個地址
同理,我們假設p=0000002h這個地址。
然後調用fun函數
void?fun?(?int?*a,int?*b)
{
int?*c; c=a;a=b;b=c;}
這個函數的功能是交換a指針與b指針的值
由上假設知道a=0000001h,b=0000002h
那麽交換後a=0000002h,b=0000001h
也許妳的疑惑就在這裏了,為啥a的指針與b的指針值交換了輸出結果卻不交換呢?
因為在執行這個函數的時候是這樣執行的,如下語句,我翻譯壹遍。
a=p;
b=q;
然後交換a,b的值
則b=p?,a=q
這裏交換的確成功了,但是我們別被它誤導了,這裏只是a,b的值交換了,
p和q的值可是沒變的!!!!!
那麽我舉個例子
#include?<stdio.h>
void?fun(int?a,int?b)
{
//交換 int?c=a; a=b; b=c;}
void?main()
{
int?x=1,y=2; fun(x,y); printf("x=%d,y=%d\n",x,y);}
妳會發現,雖然fun函數中的a,b是交換了值,但是x,y其實根本是沒變的。
這個跟上面的題目應該是壹個道理。
同樣的fun(&x,&y);?
&x=p;
&y=q;
同理。