指针(2)

指针


指针是变量的一种,里面是一个地址,通过这个地址找到要寻找的数据

int *p = &a   // p指向a, p代表a的地址

指针无论什么类型都是4个字节,一个字节8位,32位操作系统


段错误的原因:访问了不能访问的内存

int *p; //野指针,指向不能访问的地址

int *p = NULL; //空指针

p = &a;   // p 是指针,将a 的地址赋给p


int *p, *pa = &a, *pb;

pb = pa;           // 指针可以互相赋值


实例

int x = 3, y = 0, *px = &x;

y = *px + 5;     //y = 8  x = 3

y = ++*px;      //y = 4  y = 4

y = *px++;      //y = 4  px的地址+4字节


int                 if(n == 0)

指针              if(n == NULL)

bool类型       if(flag) 或者 if(!flag)

float类型       const float EPSIMON = 0.00001;

if  ( ( n >= -EPSIMON )&& ( n <= EPSIMON))


(重点)malloc

#include <stdlib.h>

src = (char *)malloc(sizeof (char) * 20);

if(NULL == src)

{

 perror("malloc")

}


free(src);             // 从堆空间释放

src == NULL;

char * ; 不需要手动释放空间,位于栈空间


strlen(地址)          //求长度 

length = (sizeof(string) / sizeof(char *));  // 求char *string[]中的元素个数



宏函数

1.增加预处理时间

2.无入参判断(不安全)

自定义函数

劣:占用过多空间

优:有入参判断



typedef unsigned char uchar; // 定义unsigned char用 uchar 代替


typedef int(* FUNC)(int, int);

FUNC p;

<=>

int *p(int, int);



int *(*(*fp)(int))[10];

(    * fp    ) fp是一个指针

(   *fp(int)   )指向一个有一个参数为int型的函数

(   *(*fp(int))   )函数的返回值是一个指针

(   int * (*(*fp(int)) [10]    )指针指向一个有10个元素的数组,每个元素的类型为int *型



int *(*(* array[5]())();

(   *array[5]   )array是一个有5个元素的数组,每个元素的类型是指针

(    *( *array[5]() )    )指针指向一个没有参数的函数,函数的返回值为指针

(     int * (*(  *array[5] )() ) ()  )指针指向一个没有参数的函数,函数的返回值为int *类型



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值