指针

指针

p=&a 使指针变量p与普通变量a相关联,也就是p指向a

*p=a 即为赋予p a的值

使用

#include<stdio.h>
int main(){
	int a=3,*p=&a;
	printf("%d\n",*p);//输出指针指向的变量值 
	printf("%d\n",p);//访问指针的内存地址空间 
	/*3
      6553224
    */
}

赋值

#include<stdio.h>
int main(){
	int a=2,j=3,arr[5]={1,2,3,4,5};
	int *p,*p1=&a;
	printf("%d\n",*p1);
	p=&j;
	printf("%d\n",*p); 
	//*p=&j;不能单独这样定义,会报错
	// int *p;  p=&j;上述这两种方法效果一样 
	p=arr;//将数组起始(也就是arr[0])地址赋值给p 
	printf("%d\n",*p); 
	p=&arr[2];//将数组中的某个元素赋值给指针
	printf("%d\n",*p);  
}

注:

  1. 指针的类型要与指针变量类型一致
  2. 可以用null或0给指针赋值,不能用具体数值或非地址表达式(p=i+5)来给其赋值

运算

#include<stdio.h>
int main(){
	int arr[5]={1,3,5,7,9};
	int *p;
	p=arr;
	printf("%d\n",p);//6553208
	printf("%d\n",*p);//1 
	p++;
	printf("%d\n",p);//6553212
	printf("%d\n",*p);//3
	p--;
	printf("%d\n",p);//6553208
	printf("%d\n",*p);//1
	//在运算过程中会加减相应数据类型所占用的字节数,每个类型会不一样 
	//*p会相应指向下一个或上一个元素 
}
  1. 在指针指向数组时,允许使用++,--的运算,指向前一个或后一个元素
  2. 两个指针只有在这两个指针指向同一个数组中的元素时,才可以进行减法运算
  3. 指针的数值可以改变

指针的比较运算

指针变量与一维数组

#include<stdio.h>
 int main(){
	int *p,a[]={1,3,5};
	//指针=&数组名[某数]
	p=&a[1];
	
	//*指针=指针指定的变量的值
	printf("%d\n",*p);
	
	//指针+1=&数组名[某数+1]
	//p+1=&a[0+1];
	
	//&数组名[某数]相当于数组名+某数
	p=&a[1];//相当于a+1	
	//数组名[某数]相当于*(数组名+某数)
	*p=a[1];//相当于*(a+1) 

    //因为a相当于a[0] 
}
 

指针变量与二维数组

#include<stdio.h>
 int main(){
 	int a[3][4]={};
	/*
	指针=&数组名[i][j]
	指针=指针指定的变量的值
	指针+i=&(数组名[i][j]后面第i个元素)
	&数组名[i][j] 相当于 数组名[i]+j
	              也相当于数组名[0]+i*列数+j
	&a[1][2]相当于a[i]+2 
	        也相当于a[0]+i*4+2
	
	数组名[i][j]相当于*(数组名[i]+j) 
	*/
}
 
posted @ 2021-12-06 14:26  valder-  阅读(99)  评论(0)    收藏  举报