预处理命令与指针基础

1.预处理命令


gcc -E-----只做预处理,不进行编译;预处理阶段会将所有宏名用其内容替换(只做简单替换)

宏:

(1)不带参宏:

        define   N   4;

(2)代参宏:

        define  add(a, b, c)   ((a) + (b) + (c))

eg 1:

#include 

#define N  100
#define add(a, b, c)  ((a) + (b) + (c))

int main(void)
{
    printf("%d\n", N);
    printf("%d\n", add(2, 3, 4));

    return 0;
}

头文件的格式

#ifndef    _头文件名大写_H_

#define   _头文件名大写_H_       

     头文件代码

#endif

//防止头文件被多次包含,使的其中的函数被多次定义引发程序错误

eg2:  

#ifndef  _fun_H_

#define _fun_H_

void fn()

{

        printf("abc");

        return ;

}

#endif

 2.指针

指针本质是一种数据类型-------指针类型(指针用于存储各种地址);

一般形式:

指针类型 * 指针变量名

int i;
int *p = &i;//此时p代表i的地址,*p则表示i的值
*p = 100;//此时是给i赋值

直接访问: i = 10;//直接给i赋值,为直接访问;

间接访问: int *p = &i ; *p = 10; //通过i的地址对i进行访问;

*&i-----表示i的值;

*&p------表示i的地址; 

&*p----表示i的地址;

int i;

int *p = &i;

*p = 10

以上语句本质上完成的操作:

(1).根据指针变量所保存的地址去内存中定位;

(2).从定位处开始向后偏移sizeof(基类型)的字节;

(3).将偏移后的那部分内存当作一个基类型变量;

利用指针的特性也可以用来测试计算机的存储类型

eg3:

#include 

int main(void)
{
    int i = 1;
    char *p;
    p = (char *)&i;
    if(*p == 1)
    {
        printf("小端存储");
    } 
    esle
    {
        printf("大端存储");
    }

    return 0;
}

 

 

 

 

你可能感兴趣的:(算法)