C语言基础6 - 指针

目录

指针

1.指针定义格式:

2.指针初始化:

3.指针相关符号

4.指针运算

5.指针进阶


指针

翻译pointer --- 指向,通常用箭头表示

C语言特有的数据类型,只有C/C++才有指针;

容易出现段错误----本质上是野指针,就是未申请但是直接使用的内存

从0X00000000到0XFFFFFFFF---地址常量,保存这个数据类型的变量叫指针

定义:保存地址常量的变量叫指针,本质是变量

32位4G虚拟内存图

kernel区和文本区指针可以指向,但是不能使用,野指针有可能指向

静态常量区都是在程序编译时申请内存,初始值默认为0,程序结束时释放常量;

栈区从上向下访问,堆区从下向上;

堆区申请malloc函数,释放free,头文件stdlib.h,标准lib库,

 void *任意类型的指针,一般放在函数头,函数类型

1.指针定义格式:

存储类型 数据类型 *变量名;

 char *pc  定义一个字符型指针

 int *px     定义一个整型的指针

 double *pd    定义一个实型的指针

 pc px pd 称为指针,char *,int *, double *为指针类型

2.指针初始化:

不初始化

Int *px;//野指针

默认初始化

使用变量初始化

使用其他指针初始化

使用绝对地址初始化

Int *py=(int *)0x1235678;使用一个绝对地址初始化,不能访问

 nil=0x0,NULL=0x0,

#define NULL ((void *)0x0)

3.指针相关符号

 *    -- 取值运算符   需要与int *、char *区分,这是数据类型,

 &   --取地址运算符

  int *px=&x, x=100;

 *px=100

c语言中没有int &符号,c++有(引用,类似指针使用,比指针更安全);

同时存在时从右向左算,

32位操作系统一个指针4个字节,64位系统指针是8个字节。

做题一般以32位操作系统做,除非特殊说明按照说明,但是现在电脑是64位

指针可以px++;加的是单位,看数据类型,char则地址加1,int加4

4.指针运算

算术运算

+ - ++ --  两个指针之间可以相减,不能直接相加   优先级后置++  >  *  =  前置++

 int a=0,*i;  i=&a;  printf("%p",i) *i++; printf("%d",a);  printf("%p",i);

假设i=0x11111111,a=0,i=0x11111115

int a=0,*i;  i=&a;  ++*i; printf("%d",a);  printf("%p",i);

i=0x11111111,a=1,i=0x11111111

指针在相加时,加的是单位个数,意味着向后挪多少个单位个数

比较运算

就是两个16进制数字的比较

   >   >=   <  <=  ==  !=

 指针之间的比较为两个十六进制数字的比较

 一般主要用于指针与NULL的比较

 if(pn == NULL)

 if(pn = NULL)

 if(NULL == pn)

 if(NULL = pn)   //错

5.指针进阶

一维数组等价关系

数组指针

如果一个指针指向一个数组,则满足等价关系:

 num【i】==pnum【i】==*(num+i)==*(pnum+i)

【】不是数组特有的符号,只要地址连续都可以访问

不等价关系:

数组名是常量,指针名是变量,意味着数组名不能赋值,不能++;指针名可以赋值,可以++

二维

指针数组---char *str【32】

数组指针--char (*ps)【32】

指针数组存在等价关系:

s[i][j]==ps[i][j]==*(*(ps+i)+j)==(*(ps+i))[j]==*(ps[i]+j)-----pn可以和num互换

不等价关系:

数组名是常量,指针名是变量,意味着数组名不能赋值,不能++;指针名可以赋值,可以++

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值