1函数的形参和在函数内声明的变量都是该函数的局部变量,不同函数的局部变量相互独立
2 void ab(int a,int b);调用时:ab(1,2);是把1赋值给a,把2赋值给b
3形参的改变和实参的改变无关。实际参数(简称实参)
4一个正确转换两个数的值的函数:
#include<stdio.h>
void swap(int* a,int* b)
{
int t=*a;
*a=*b;
*b=t;
}
int main()
{
int a=3,b=4;
swap(&a,&b);
cout<<a<<b<<endl;
return 0;
}
5 *a是指:a指向的变量,而不仅是a指向的变量所拥有的值
6 *a =*a+1;是让a指向的变量自增1,也可以写成(*a)++,因为++运算符优先级高于去内容运算符*,所以要加括号
7这个程序是错误的
void swap(int* a,int* b)
{
int* t;
*t=*a;
*a=*b;
*b=*t;
}
错误原因:t是一个变量(指针也是一个变量,只不过类型是指针),因此它的值在赋值前是不确定的。如果这个“不确定的值”所代表的内存单元恰好是能写入的,那么这段程序将正常工作;但如果它是只读的,程序可能崩溃。
8 sizeof 输出的是字节数
如:int a=3;
int len=sizeof(a);
cout<<len<<endl;
输出结果为4(一个int占4个字节)
如:double a=3;
int len=sizeof(a);
cout<<len<<endl;
输出结果为8(一个int占8个字节)
这里*a代表a[0],而不是整个数组
9在函数定义中的int a[ ]等价于int* a
10 a是数组名,a+1指向a[1]
若p是指针,k是整数,p+k就是指向指针后面第k个元素
p-k就是指向p前面第k个元素
11两种主要的求数组和的方法
1.
#include <iostream>
using namespace std;
int sum(int* begin,int* end)
{
int len=end-begin;
int cul=0;
for(int i=0;i<=len-1;i++)
cul=cul+begin[i];
return cul;
}
int main()
{
int a[5]={1,2,3,4,5};
cout<<sum(a,a+5)<<endl;
}
2.
#include <iostream>
using namespace std;
int sum(int* begin,int* end)
{
int cul=0;
for(int* p=begin;p!=end;p++)
cul=cul+*p;
return cul;
}
int main()
{
int a[5]={1,2,3,4,5};
cout <<sum(a,a+5) << endl;
return 0;
}