数组的名字是数组的首地址
数组名是个常量
大端:数据的高字节存在内存的低地址上
小端:数据的低字节存放在内存低地址上
一维数组和指针之间的转换:
a[1]=*(a+1)取出数组中a[1]的内容
int *p; p=a; *p=a[0] p指向数组的首地址 *p取的是首地址里面的内容
二维数组与指针之间的转换:
a[1][2]=*(*(a+1)+2) 取出数组中a[1][2]的内容
int *p; p=a; *p=a[0][0] p指向数组的首地址 *p取的是首地址里面的内容
int (*arr)[3]; *arr为指针变量,除此之外,其他成分都是访问方式,arr每移动一个单 位就移动3个int
一维数组对应一重指针,二维数组对应二重指针
数组/指针代码示例:
int main(void)
{
int arr[3]={12,13,14};
int a[2][3]={{1,2,3},{4,5,6}};
int *p;
p=a;
printf("a[0][0]=%d\n",*p);
int (*aar)[3];
aar=a;
printf("a[0][0]=%d\n",**aar);
printf("a[1][0]=%d\n",*(*(aar+1)));
printf("a[1][2]=%d\n",*(*(aar+1)+2));
printf("a[2]=%d\n",*(arr+2));
printf("a[1][2]=%d\n",*(*(a+1)+2));
printf("a[0][1]=%d\n",*(*a+1));
printf("a[0][0]=%d\n",*(*a));
return 0;
}
函数:在定义函数时,应尽量函数功能单一化,模块化
软件分层思想:
gdb调试工具使用
gdb 文件名.out
l显示十行
b 函数名 设置断点表示程序执行到端点即停止运行
r 运行
p 变量 打印指定的变量值
n 运行下一个
q 退出
s 分布执行
形参被实参初始化时,被传递的实参值不会改变,传递地址址时,仅仅是该地址里面的内容发生变化,而地址本身不会改变
函数代码示例
#include
int main(void)
{
int a=3,b=5;
int c=6,d=9;
swap(a,b);
printf("a=%d,b=%d\n",a,b);
swap1(&c,&d);
printf("c=%d,d=%d\n",c,d);
return 0;
}
swap(int x,int y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
printf("x=%d,y=%d\n",x,y);
return;
}
swap1(int *i,int *j)
{
int *p;
p=*i;
*i=*j;
*j=p;
printf("*i=%d,*j=%d\n",*i,*j);
return;
}