指针基础知识点

一,指针定义及使用

 普通指针:
int val=0;
int *p=&val;
*p=10;//可以通过指针改val的值
 数组指针:
//使用
int arr[3];
int (*p) [3]=&arr;//arr整体
//重命名
typedef int (*p1) [3] ;//将p重命名为p1
//定义数组指针
int (*p) [3]=&arr;
     p1 q=&arr;
函数指针:
//函数名含义:函数入口的地址
int add(int a,int b);
int mul(int a,int b);
int (*p) (int,int)=add;//函数指针定义
int (*p) (int,int)=mul;
add(1,2);//函数名调用
p(1,2);//函数指针调用
p=mul;
p(1,2);//调用mul函数
函数指针重命名:
typedef int (*p1) (int,int);//将上面的函数指针p重命名为p1
p1 q=add;
q(1,2);//调用add;
q=mul;
q(1,2);//调用mul

二、判断大小端问题

定义:

小端:低地址存放低位数据   低低  (vs存储模式)

大端:低地址存放高位数据   低高

//指针验证
int val=0x12345678;
char *p=(char*)val;
if(*p==0x12)
    printf("大端");
else
    printf("小端");
//联合体验证
union A
{
 int val;
 char arr[2];
};

int main()
{
 A a;
 a.value=0x12345678;
 if(a.arr[0]==0x78)
 printf("小端");
 else
	printf("大端");

 
}
内存中的地址解析:

0x78  0x56  0x34  0x12

低地址                     高地址

三,指针加一能力(指针偏移量问题)

所指数据类型  *   p;

p+1:所指数据类型的大小

//数组指针
int arr[3];
int (*p) [3]=&arr;
p+1 偏移3*4=12个字节
//指针数组
int *p=arr;
p+1 偏移4个字节
数组与指针的关系:
*(arr+0)=arr[0];
*(arr+1)=arr[1];
*(*(arr+1)+2)=arr[1][2];//二维数组
指针相减:

只能在连续内存空间中相减

四,指针数组

//定义
字符串常量
const char* arr[3]={"zs","jbjhchs","jhcs"};

五,const与指针结合

1.& *之间的关系
int val;
*(&val)=val;
2.const限定*p

不能改值但可以改地址

char val = 'k';
const char* p = &val;//const限定*p,*p为常性,所以*p不能被改,不能通过p修改p所指之物
//*p = 10;//err
3.const限定p

可以通过指针改值,但不能改地址

int a = 10;
int* const p = &a;//const限定p,p为常性,p不能被改,但可以用*p改a
//p=&b;//err
//*p=20//right  将a的值改为20
4.两个const进行限定

值和地址都不能被改

const int* const p = &a;
//p=&b//err;
//*p=20//err

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值