ios笔记--C语言指针笔记


1、什么是指针?

   指针就一个能够根据一个地址值,找到对应的存储空间然后进行取值赋值

2、指针分直接引用和间接引用。

直接引用就是直接通过变量名来读写变量。

间接引用就是先将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a

变量

地址

存放的内容

a

ffc1

 

b

ffc2

ffc1

 

3、指针变量:用来存放变量地址的变量。

如 char *p;char a;

p=&a;//让指针变量p指向a,就是把a的内存地址赋给指针变量p,这*p就能访问变量a的存储空间了。

上面那两句可以简写成 char *p =&a;

 

4、在同一个编译器环境下,一个指针变量所占的内存空间是固定的。它不会因为指向的类型不同而在内存中所占的空间大小也不同。但在不同的编译器下所占的内存空间是不一样的。

指针变量

16位编译器

32位编译器

64位编译器

void *(指针变量)

2字节

4字节

8字节

char

1字节

1字节

1字节


5、指针变量所占的内存大小都一样,指针为什么还要分类型?

  因为char型指针占1个字节,其他类型的指针占两个字节,所以要分类一下,不然会出现值不对应的事情。如:

#include<stdio.h>

void main(){

int i =2;

char c =1;

char *p =&c;//这样输出是正确的

int *p =&c;//这样输出是错误的,因为int指针是占两个字节的,所以会认为变量c也是,这样就会造成输出结果不正确。

printf(“c的值为%d”,*p);

}

 

6、指针与一维数组

int a[5];

int *p;

//让指针指向数组的第0个元素

p = &a;

//或者

p = &a[0];

说明:p是指针,a是一个数组如果p指向了一个数组元素,则p+1表示指向数组该元素的下一个元素。比如,假设p = &a[0],则p+1表示a[1]的地址对于不同类型的数组元素,p值的改变是不同的。如果数组元素为int类型,p+1代表着p的值加上2(16位编译器环境下)

 

7、空指针

没有存储任何内存地址的指针就称为空指针。

空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0

如:Student *s1 = NULL;

Student *s2 = nil;

 

8、野指针:不是NULL指针,是指向垃圾内存即不可以用内存的指针。

 

9、函数指针

一般形式:一般形式:函数的返回值类型 (*指针变量名)(形式参数1, 形式参数2, ...);

注意:形式参数的变量名可以省略,甚至整个形式参数列表都可以省略,指针变量存储的是一个函数的入口地址,所以对它们作加减运(比如p++)是无意义的

#include <stdio.h>

 

int sum(int a, int b) {

    return a + b;

}

 

int main()

{

    // 定义一个指针变量p,指向sum函数

    int (*p)(int a, int b) = sum;

    // 或者 int (*p)(int, int) = sum;

    // 或者 int (*p)() = sum;

    

    // 利用指针变量p调用函数

    int result = (*p)(1, 3);

    // 或者 int result = p(1, 3);

    

    printf("%d", result);

    return 0;

 

指向函数的指针变量主要有两个用途:

(1)调用函数

(2)将函数作为参数在函数间传递。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值