C语言全部知识点总结 下载本文

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)一维数组的重要概念:

合法,合法,合法,合法,不合不合合法,