p=&a;
6)传数值和传地址(每年必考好多题目)
void fun(int a,int b) void fun(int *a,int *b) {
int
t
;
{ int t ; t=a
;
a=b
t=*a;*a=*b;*b=t;
} } main(
main()
{ int x=1,y=3, { x=1,y=3, fun
(
x
,
fun(&x,&y)
printf(“%d,%d”printf(“%d,%d”,x,y);} }
这个题目答案是1和3。 个题目的答案就是3和1。
y
,xb=t
)
y;
)
int ;
;
这;
,)传数值,fun是用变量接受,所以fun中 传地址,fun用指针接受!这个时候fun
的交换不会影响到main中的x和y 。 中的交换,就会影响到main中的x和y。
传数值,形参的变化不会影响实参。 传地址形参的变化绝大多数会影响到实参!
7)函数返回值是地址,一定注意这个*号 int *fun(int *a,int *b) 可以发现函数前面有{ if(*a>*b)return a; return a 可以知道返回的是a地址。 } main()
{ int x=7,y=8,*max;
max = fun(&x,&y); 由于fun(&x,&y)的运算结果是地址,所以用max来接收。 printf(“%d”, *max);
} 8)考试重要的话语:
指针变量是存放地址的。并且指向哪个就等价哪个,
个*,这个就说明函数运算结果是地址
else return b;
所有出现*p的地方都可以用它等价的代替。例如:int a=2,*p=&a; *p=*p+2;
(由于*p指向变量a,所以指向哪个就等价哪个,这里*p等价于a,可以相当于是a=a+2)
25. 数组: 存放的类型是一致的。多个数组元素的地址是连续的。
1)一维数组的初始化: int a[5]={1,2,3,4,5}; 合法 int a[5]={1,2,3, }; 合法 int a[]={1,2,3,4,5}; 合法,
int a[5]={1,2,3,4,5,6}; 不合法,赋值的个数多于数组的个数了 2)一维数组的定义;
int a[5];注意这个地方有一个重要考点,定义时数组的个数不是变量一定是常量。
int a[5] ; 合法,最正常的数组 int a[1+1] ; 合法,个数是常量2,是个算术表达式
int a[1/2+4] ; 合法,同样是算术表达式
int x=5,int a[x] ; 不合法,因为个数是x,是个变量,非法的, #define N 5
int a[N] ; 合法,define 后的的N是符号常量,只是长得像变量 3)二维数组的初始化
int a[2][3]={1,2,3,4,5,6}; 很标准的二维的赋值。
int a[2][3]={1,2,3,4,5 }; 后面一个默认为0。
int a[2][3]={{1,2,3} ,{4,5,6}}; 每行三个。
int a[2][3]={{1,2},{3,4,5}}; 第一行最后一个默认为0。
int a[2][3]={1,2,3,4,5,6,7}; 法,赋值的个数多余数组的个数了。
int a[][3]={1,2,3,4,5,6}; 法,不可以缺省行的个数。
int a[2][]={1,2,3,4,5,6}; 可以缺省列的个数。 补充:
1)一维数组的重要概念:
合法,合法,合法,合法,不合不合合法,