1.day1
1、mobaxterm使用
1、更方便的使用虚拟机终端;
2、新建一个终端,CTRL + SHIFT + U;
3、清屏,CTRL + L;
2、gdb调试
参考《gdb调试器练习》
2.day2
3.day3
1、vin自动生成main函数
1)打开vim的配置文件;
sudo vim /etc/vim/vimrc
2)在文件末尾添加下面一行;
map f i#include <stdio.h><Esc>o<Esc>oint main(void)<Esc>o{<Esc>oreturn 0;<Esc>o}<Esc>2ko
3)使之生效;(报错不用管,会认为是shell脚本)
sudo source /etc/vim/vimrc
2、数组指针和指针数组
1)数组指针、指针数组的定义
首先,理解一下数组指针和指针数组这两个名词:
“数组指针”和“指针数组”,只要在名词中间加上“的”字,就知道中心了——
数组的指针:是一个指针,什么样的指针呢?指向数组的指针。
指针的数组:是一个数组,什么样的数组呢?装着指针的数组。
然后,需要明确一个优先级顺序:()>[]>*,所以:
(*p)[n]:根据优先级,先看括号内,则p是一个指针,这个指针指向一个一维数组,数组长度为n,
这是“数组的指针”,即数组指针;
*p[n]:根据优先级,先看[],则p是一个数组,再结合*,这个数组的元素是指针类型,共n个元素,
这是“指针的数组”,即指针数组。
根据上面两个分析,可以看出,p是什么,则词组的中心词就是什么,即数组“指针”和指针“数组”。
int *p1[5];
int (*p2)[5];
首先,对于语句“int*p1[5]”,因为“[]”的优先级要比“*”要高,所以 p1 先与“[]”结合,构成一个数组的
定义,数组名为 p1,而“int*”修饰的是数组的内容,即数组的每个元素。也就是说,该数组包含5
个int类型数据的指针,因此,它是一个指针数组。
其次,对于语句“int(*p2)[5]”,“()”的优先级比“[]”高,“*”号和 p2 构成一个指针的定义,指针变量名
为p2,而int修饰的是数组的内容,即数组的每个元素。也就是说,p2是一个指针,它指向一个包
含5个int类型数据的数组。
2)数组指针、指针数组的使用
1.数组指针的使用,如下所示:
#include <stdio.h>
#include <stdlib.h>
typedef int ARR[3];
int main(void)
{
int a[2][3] = {{1,2,3},{4,5,6}};
int(*p)[3] = a;
int i,j;
for(i = 0; i < 2; i++){
for(j = 0; j < 3; j++)
printf("%d ",p[i][j]);
printf("\n");
}
//在堆中分配二维数组空间,将其首元素地址赋给p
p = (ARR*)malloc(sizeof(int)*2*3);
if(NULL == p){
perror("mlloc");
exit(1);
}
for(i = 0; i < 2; i++)
for(j = 0; j < 3; j++)
scanf("%d",&p[i][j]);
for(i = 0; i < 2; i++)
for(j = 0; j < 3; j++)
printf("%d %d %d\n",p[i][j],*(p[i]+j),*(*(p+i)+j));
free(p);
return 0;
}
2.指针数组的使用,如下所示:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a[2][3] = {{1,2,3},{4,5,6}};
int *p[2];
int i,j;
p[0] = a[0];
p[1] = a[1];
for(i = 0; i < 2; i++){
for(j = 0; j < 3; j++)
printf("%d ",p[i][j]);
printf("\n");
}
p[0] = (int *)malloc(sizeof(int)*3);
if(NULL == p[0]){
perror("mlloc");
exit(1);
}
p[1] = (int *)malloc(sizeof(int)*3);
if(NULL == p[1]){
perror("mlloc");
exit(1);
}
for(i = 0; i < 2; i++)
for(j = 0; j < 3; j++)
scanf("%d",&p[i][j]);
for(i = 0; i < 2; i++)
for(j = 0; j < 3; j++)
printf("%d %d %d\n",p[i][j],*(p[i]+j),*(*(p+i)+j));
free(p[0]);
free(p[1]);
return 0;
}