您当前的位置: 首页 >  c语言

white camel

暂无认证

  • 2浏览

    0关注

    442博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C语言指针

white camel 发布时间:2017-07-14 08:44:18 ,浏览量:2

指针知识点:

指针:  就是地址

指针变量: 存放地址的变量

指针的作用: 有了指针就可以访问它所指向的存储空间

定义指针: 

指针所指向数据类型* 指针变量名称

*的作用:

1: 在定义指针变量的时候,它是类型说明符,它说明定义的这个变量是一个指针变量

2; 如果不是 在定义指针的时候,它是一个操作符,用在指针变量前面访问指针所指向的存储空间

&作用:

1: 取地址符,取出变量的地址

当*作为操作符的时候,它与&是一对反操作符

指针的初始化:

1: 先定义再初始化

int num = 10;

int* p;

p = #

p = 1000;  //错误

2: 定义的同时进行初始化

int* p2 = #

*p2 = # //错误   *在这里是一个操作符,是访问p2所指向的存储空间

指针的注意点: 

1、只有定义没有初始化的指针里面是垃圾值,也就是说它的指向是不确定的,称为野指针

2、如果访问一个野指针所指向的存储空间

2.1: 程序崩溃

2.2: 潜在的逻辑错误

3、我们不能给指针直接赋值一个整形数,因为内存是由操作系统管理的,我们不了解当前电脑中,那一块内存

是占用的,空闲的,所以内存是由操作系统分配的.

4、指针的指向是可以改变的

5、多个指针可以同时指向一个变量

指针作为函数的参数:

1、指针作为函数参数传递是 地址传递

1.1: 通过修改指针所指向的存储空间,才能修改主调函数中变量的值,如果仅仅修改指针本身,不影响 主调函数

2: 数组作为函数参数传递是 地址传递

3、基本数据类型作为函数传递是 值传递

指针的使用场景:

1、通过被调函数,修改主调函数中某个变量的值

2、让函数返回多个值

************************************************************************

多级指针:

二级指针: 指向一级指针的指针

int num = 10;

int* p = #

int** p = &p; //定义一个二级指针

**p = 20; //访问num

三级指针: 指向二级指针的指针

指针的运算:

算术运算: pointer代表指针,num 代表一个整形数

//pn + pn1 == (pn + pn1) / sizeof(指针指向的类型); 和指针指向数据类型的字节数有关

pointer + num 把指针向后移动num个它所指向的数据类型个单元

pointer - num 把指针向前移动num个它所指向的数据类型个单元

赋值运算:

pointer = &var;

pointer += num;

pointer  -= num;

关系运算(比较运算)

pointer1 == pointer2  pointer1 与pointer2 指向同一个地址

ponter1 > pointer2 pointer1 的地址 > pointer2的地址

自增自减:

++pointer;

pointer++;

- - pointer;

pointer- -;

指针与一维数组:

1、数组像一个指针: 使用数组名访问数组中的元素,与使用指向这个数组的指针的访问其元素是等价的

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

int* pointer = nums;

nums[1] == pointer[1] == *(nums + 1) == *(pointer + 1);

2、数组不是一个指针

2.1:  sizeof(nums) != sizeof(pointer)

2.2: nums = &nums  但 pointer != &pointer

2.3: 指针的指向是可改变的,数组指向是不可改变的

指针与二维数组:

1、指针数组: 元素为指针的数组

格式:

指针类型     数组名称[指针的元素个数]  

比如:  int* ps[2]

2、数组指针: 数组的指针

指向一维数组的指针:  int (*pointer)[元素个数];

指向一维数组的指针 和 二维数组相对应

int nums[3][3] = { {1,2,3},{4,5,6},{7,8,9} }

pointer = nums;

pointer++; //此时指向4 它是加一个一维数组的长度

nums + 1 // 加的也是一个一维数组的长度

nums[1] + 1   // 它是加上一个一维数组元素的长度

const指针:

const在星号左边

修饰的是指针指向的内存

1. 指针可以改变指向

2. 不可以通过指针改变其所指向内存的值

const在星号的右边

修饰的是指针变量本身

1. 指针不可以改变指向

2. 可以通过指针改变其所指向内存的值

星号左边两边都有const

1. 指针不可以改变指向

2. 不可以通过指针改变其所指向内存的值

注意: 变量本身扔可以通过变量名去修改

函数指针: 指向函数的指针

定义指向函数的指针变量的格式为:

数据类型   (*指针变量名) (形参列表)

eg;

float (*p) (float x ,float y);

注意: 括号不能省略

float (*p) (int x , int y);定义了一个指向函数的指针变量

float* p (int x ,int y); 是一个返回值为指针类型的函数的声明

指向函数的指针变量的说明:

1: 把函数首地址赋给指针变量时,直接写函数名即可,不用写括号和函数参数

2: 利用指针变量调用函数时,要写明函数的实际参数

3: 函数指针的指向可以改变,但必须指向同类型的函数

同类型的函数:返回值类型和形参列表都相同

函数名和数组名一样.都是指针,函数名指向函数内存首地址

关注
打赏
1661428283
查看更多评论
立即登录/注册

微信扫码登录

0.0386s