华清远见嵌入式学习day04——C语言编译环境及指针

                                                                       C语言编译环境
c语言是编译性语言
1.gcc 
       gcc test。c
       gcc test。c -o test
       gcc -o test test.c
编译器主要组件:
     分析器
    汇编器
    链接器
    标准c库

gcc编译流程:
  1.预处理
头文件包含
头替换
gcc -E test.c -o test.i
  2.编译
gcc -S test.i -o test.s
  3.汇编
gcc -C test.s -o test.o
  4.链接
gcc test.o -o test

add.c sub.c test.c main.c add.h sub.h test.h
        
        gcc *.c -o main --->>> | --->>> gcc -c add.c -o add.o 
                               | --->>> gcc -c sub.c -o sub.o
                               | --->>> gcc -c test.c -o test.o 
                               | --->>> gcc -c main.c -o main.o
                               | --->>> gcc *.o -o main
                               
2.gdb调试工具
     逻辑错误
     gcc编译的时候增加 -g选项
      gdb 可执行程序

            查看文件

             (gdb) l
            设置断点 
            (gdb) b 6
            查看断点情况 
            (gdb) info b
            运行代码 
            (gdb) r
            
            查看变量值
            (gdb) p n
            单步运行 
            (gdb) n
            (gdb) s
            恢复程序运行 
            (gdb) c
            帮助 
            (gdb) help [command] 
 


                                                                    指针
地址:
内存单元的编号
变量:
是对内存单元的抽象
数据类型:
修饰变量              确定变量在内存中开辟的空间大小
 1.指针

本质是数据类型    修饰变量    -- 确定变量在内存中开辟的空间大小
特点:指针修饰的变量在内存中开辟空间大小4字节,用来存放地址

2.指针变量:
      int*      a

3.指针和数组
指针:指针变量、地址常量都是指针

===============================================================================

数组:

构造数据类型

一般定义形式:
<数据类型>  数组名[数组元素个数];
数组名:数组的首地址,地址常量
数据类型:修饰的是数组元素的数据类型
在内存空间中的大小:sizeof(数组名) = 数组元素的个数 × sizeof(数据类型)

===============================================================================

举例:
        int arr[5] = {0,1,2,3,4};
         int *p = arr;

指针的运算:
+
-
++
--
==
!=
强制类型转换:
使数据类型相同

4.指针和字符串
字符串可以存放在数组里,需要连续的内存空间 -------数组就是连续的空间,数组可以存放字符串
char str[] = {'a','b','c','/0'}
char str[] = "abc"

char *p = "abcde"

 printf("%s,%s\n",str,p);

5.指针数组和数组指针

指针数组:
指针用来修饰数组,本质是数组该数组元素类型是指针变量或地址常量
一般定义形式:
 <数据类型>*数组名[数组元素个数];

数组指针:
本质:指针
指向一个二维数组

====================================================================================

二维数组:
一般定义形式:
<数据类型> 二维数组名[行数][列数];
在内存中存储方式:按行优先
行地址加一,等于移动一行,有多少列决定移动列数个元素

int【】【3】行数可以省略  

==================================================================================

数组指针的一般定义形式:
<数据类型>(*数组指针变量名)[列数];

int (*p)[3] = a;
        
        a[i][j] <==> *(a[i] + j) <==> *(*(a+i) + j)  <==> *(*(p+i) + j)  
        
        <==> *(p[i] + j)  <==>  p[i][j]

        

6.多级指针
指向指针的指针,二级指针以上的指针
一般定义形式:
<数据类型>**二级指针变量名;

7.const和void
const:常量化
const int a;
看const修饰谁可以把数据类型去掉来看
const int *a;
int const *a;
in * const a;
void:空类型
作用:修饰函数的返回值,函数形参(说明函数不需要传参)修饰变量
void a;(会报错,因为不知道void能申请多少空间)
void *a;可以来定义一个void类型的指针
用void修饰的指针变量可以指向任何类型的地址
 

猜你喜欢

转载自blog.csdn.net/UemTuBXuR/article/details/88426715