指针的特性

指针其实就是一个类型他是一个什么类型呢?他适合存储地址的一个类型,变量名加个*就是一个指针啦,(指针是可以一个*或者多个*)

比如说

	int* ptr1 = NULL;
	char* ptr2 = NULL;
	short* ptr3 = NULL;

	int** ptr4 = NULL;
	char** ptr5 = NULL;
	short** ptr6 = NULL;

先来说一下正题指针的特性

在x86架构的大小

在x64架构的大小

以上截图可以证明不管指针是一个*或者多个*在x86的指针占据4字节,在X64架构占8字节,为什么呢?   指针就是地址地址就是指针,指针是用来操作内存的但是呢咱们操作内存是不是得需要一个内存地址然后来操作内存地址的值

x64架构的内存地址

x86的内存地址

咱们可以发现有明显的区别地址长度就是最大的区别这就是为什么x86的指针占4字节x64的指针占8字节

一个*和多个*有什么区别我来给你举个例子吧

    char* ptr1 = NULL;
	char** ptr2 = NULL;
	ptr1++;
	ptr2++;
	printf("ptr1 %d\n", ptr1);
	printf("ptr2 %d\n", ptr2);

x86架构下的运行结果

来告诉一下怎么算出来的吧很简单砍掉一个*再计算什么意思比如说

ptr1是个char*类型占用4字节

ptr2是个char**类型也占用4字节

char是一个字节吧?char*砍掉一个*就是char也就是1字节然后+1就是等于+1,

char**是占用4字节砍掉一个*还是4字节所以+1等于+4

使用指针的一个简单例子

	int b = 0;        //定义一个变量
	char* ptr;        //定义一个指针
	ptr = (char*)&b;  //指针指向b的(地址)
	*ptr = 5;         //用指针操作b的值
	printf("%d\n", b);//打印b的值

运行后你就会发现b的值变成了5

其实数组也是有指针的特性

	char str[2][6] = {"hello","World"};
	char* ptr = (char*)&str;//ptr指向str字符串

	printf("%c\n", str[1][4]);    //访问d字符
	printf("%c\n", *(*(str+1)+4));//访问d字符
	printf("%c\n", ptr[10]);      //访问d字符
	printf("%c\n", *(ptr+10));    //访问d字符

 以上写了一个字符串还有一个指针这是一些操作方法

ptr[10]等同于*(ptr+10)只是简写而已我认为没有什么指针数组啊数组指针啊还是什么指针变量啊,指针就是指针我想怎么指就怎么指(但是指向不存在的内存地址或者无法访问的内存地址会报错的)

执行结果

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值