c语言---指针(一)

大家一提到指针,就觉得非常难,说的都是什么呀。其实静下心来,我们可以发现,他也没多少东西。首先要相信自己,有些面试题,画完图就清楚很多。

指针的定义

指针就是地址,我们口头上说的指针其实指的是指针变量。

指针变量

指针变量就是存放地址的变量
eg.int a = 0; int* p = &a;

指针类型

int char float 这些类型我们肯定不陌生,但是如果要存储不同类型的变量的地址,我们应该怎么存呢?这时指针类型,因运而生。
存放int类型的变量 利用int*
存放char类型的变量 利用char*
其他类似。但是数组指针 指针数组 函数指针不相同,在后面的文章会提到。
eg。

int a = 0;
char ch = 's';
int *p= &a;
char *ptr=&ch;

指针的计算

  • 指针加减整数
        指针的加减整数类似于指针移动,并且指针的类型决定了指针向前或者向后走一步有多大(距离)。
    eg.
#include <stdio.h>
//演示实例
int main()
{
 int n = 10;
 char *pc = (char*)&n;//将int*类型的指针强制转换成char*
 int *pi = &n;
 
 printf("%p\n", &n);//
 printf("%p\n", pc);//
 printf("%p\n", pc+1);//
 printf("%p\n", pi);//
 printf("%p\n", pi+1);//
 return  0;
}

在这里插入图片描述
结合运行结果可知, printf("%p\n", &n);printf("%p\n", pc); printf("%p\n", pi); 输出都是00CFF940,pc和pi+1后全完全不同,pc是char所以只移动一个字节,而pi是int 所以移动了4个字节。

  • 指针-指针
       其实就是两个地址之间相差多少个元素。
  • 指针的解引用
        指针变量中存放是地址,指针解引用就是根据保存的地址查找到那段空间,并进行操作。
int main()
{
 int n = 0x11223344;//存了一个16进制的数
 char *pc = (char *)&n;
 int *pi = &n;
 *pc = 0;   //n中现在就保存0啦
 *pi = 0;   
 return 0;
}

将这段代码放进vs中运行,我们在调试的过程中我们可以发现,指针类型不一样,解引用的权限也不一样。比如char* 的指针解引用就只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。
n 在内存中是· 44 33 22 11存储(小端存储),pc=0;在内存中的表现为 00 33 22 11,而pi=0;在内存中的表现为 00 00 00 00

野指针

何为野指针呢·?
  野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
什么时候会出现野指针呢?

  • 指针未初始化
  • 指针越界访问
  • 指针指向的空间释放
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值