云计算百科
云计算领域专业知识百科平台

C语言指针01

1.指针让·C语言更加简洁高效

2.C指针可以直接操作内存

指针基本概念

1.概念

地址:在内存中用来区分不同字节的编号

            64位用8个字节表示地址

             32位用4个字节表示地址

指针:指针就是地址,地址就是指针,指针指向某个个内存的空间

指针变量:用来存放地址编号,指针变量是一个变量,使用指针就是使用地址,指针变量简称指针

2.运算符

1.&

        获得变量在内存中的地址

        int a = 0;

        &a;

        表达式的值:变量在内存中的首地址

       表达式类型:int * ; & 有类型升级的效果

2.*

        作为左值:*p = 100;  把右值放入指针指向空间

        作为右值:a = *p;    取指针指向空间的值

表达式类型:有类型降级的效果

3.指针变量的定义

指针类型 *变量名;

int *a;       char *a;       double *a;              int *a,*b;

指针变量空间均为8个字节

4.指针变量的初始化

1.野指针

        未初始化的指针,指向随机空间或指向已被释放的空间的指针

2.空指针

int *a = NULL;  NULL内存值为0,指向内存地址0x0空间的指针

NULL(指针类型)     '\\0'(char)      0(int)     三者等价

地址为0x0的空间不能读写,否则会出现段错误

5.内存访问的两种形式

1.通过变量名直接访问(受限于作用域)

        int a;

        a;

2.通过变量的地址访问变量(间接访问)

        int a;

        int *p = NULL;

        p = &a;

        *p = 100;

6.指针的算术运算

        ++     —    +    –    

指针偏移量:

        p++,指针向高位地址偏移指向的数据类型大小个字节空间

        p–,指针向低位地址偏移指向的数据类型大小个字节空间

指针变量

        指针变量的本质:存放地址的空间。为指针变量(p)赋值:修改指针指向的空间

        指针变量指向的空间:为该空间(*p)赋值,指针不会发生变化,但指针指向的空间的值会发生变化

7.指针作为函数参数

1.传值

        函数体内想使用函数体外部分的变量值的时候

2.传地址

        函数体内想改变函数体外部分的变量值的时候

8.指针和数组的关系

1. 指针和数组的关系

        一维数组的数组名是指向第一个元素的空间的指针常量

int a[5] = {1,2,3,4,5};
int *p = NULL;
p = a;

数组下标为n的元素访问

a[n] = p[n] = *(a + n) = *(p + n)

在C语言中[ ]是表示指针变量加上某个偏移量再取值(p[n] = *(p + n)

数组是用来存放一组数据的

指针是用来操作数据的

9.数组传参

int a[5] = {1,2,3,4,5};

int fun(int *array,int len)

10.字符型数组和字符串传参

        char a[32] = {"hello world"};

        int fun(char *p);

11.函数指针和指针函数

1.函数指针

        函数指针是指针,是指向函数的指针,函数的函数名就是函数指针。

2.指针函数

        指针函数是函数,它的返回值是指针类型的,指针函数不能返回局部变量的地址,函数返回值作为下一个调用函数参数时可以使用指针函数

12.const指针

(1)const int *p  (2)int const *p     

(3)int *const p

(4)const int *const p  (5)int const *const p

(1)(2)等价,修饰*p,即不能通过*p修改指针指向空间的值,但可修改指针空间的地址

(3)修饰p,即不能修改指针变量空间内的地址,但可以通过*p修改指向空间的值 ,必须初始化(否则指针就是一个野指针)

(4)(5)等价,上述二者都不能修改

赞(0)
未经允许不得转载:网硕互联帮助中心 » C语言指针01
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!