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)等价,上述二者都不能修改
网硕互联帮助中心


评论前必须登录!
注册