Java教程

指针运算(自己做个笔记)

本文主要是介绍指针运算(自己做个笔记),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1,指针+1 地址变化

#include <stdio.h>
int main(){
	int a[]={0,1,2,3,4,5,6};
	int *p=a;
	int *p1=p+1;
	printf("p = %p\n",p);
	printf("p1 = %p",p1);
	return 0;
} 

输出:
p = 000000000062FDF0
p1 = 000000000062FDF4

相差4个字节,也就是  指针+1==指针内存地址+sizeof(指针类型)

2,指针+1 值变化

#include <stdio.h>
int main(){
	int a[]={0,1,2,3,4,5,6};
	int *p=a;
	int *p1=p+1;
	printf("p = %d\n",*p);
	printf("p1 = %d",*p1);
	return 0;
} 

指针:
p = 0
p1 = 1

给指针加一,表示要让指针指向下一个变量

*p --->a[0]

*(p+1) --->a[1]

3,指针可进行算术运算

  • 加减一个整数
  • ++   --
  • 指针相减

(1)指针相减

#include <stdio.h>
int main(){
	int a[]={0,1,2,3,4,5,6};
	int *p=a;
	int *p1=&a[2];
	printf("p = %p\n",p);
	printf("p1 = %p\n",p1);
	printf("相差 = %p",p1-p);
	return 0;
} 

输出:
p = 000000000062FDF0
p1 = 000000000062FDF8
相差 = 0000000000000002

 竟然不是8,而是4.说明指针相减结果不是地址差,而是 地址差/sizeof(指针类型)

4,*p++

  •  * 优先级没有 ++ 高
  • 取出p所指的数据,顺便把P移到下一个位置
#include <stdio.h>
int main(){
	int a[]={0,1,2,3,4,5,6,-1};
	int *p=a;
	while(*p!=-1){
		printf("%d ",*p++);
	}
	return 0;
} 

输出:
0 1 2 3 4 5 6

 5,指针比较

  • 实际上是内存地址大小比较
  • < > >= <= == !=

6,0地址

  • 内存有0地址,不能随便碰

  • NULL <----> 0地址 

7,指针特点

  • 不同类型指针,大小一样
  • 不同类型指针,不能相互赋值
  • #include <stdio.h>
    int main(){
    	int a[]={0,1,2,3,4,5,6,-1};
    	int *p=a;
    	double *k;
    	k=p;
    	return 0;
    } 
    
    [Error] cannot convert 'int*' to 'double*' in assignment

     

void* 指针   不知道指向什么的指针 

这篇关于指针运算(自己做个笔记)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!