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类型数据的指针,因此,它是一个指针数组。

高级C语言-LMLPHP

 其次,对于语句“int(*p2)[5]”,“()”的优先级比“[]”高,“*”号和 p2 构成一个指针的定义,指针变量名

为p2,而int修饰的是数组的内容,即数组的每个元素。也就是说,p2是一个指针,它指向一个包

含5个int类型数据的数组。

高级C语言-LMLPHP

 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;
}
08-02 22:42