高级指针的运算

字符串

#include <stdio.h>
#include <stdlib.h>
void main8()
{
   char* str="tasklist";
   //将字符串常量tasklist 的地址,传给str
   printf("\n%d,%d",sizeof(str),sizeof("tasklist"));//\0 9个字节
   system(str);//system 根据字符串地址,或者字符串
   getchar();
}

比较

#include <stdio.h>
#include <stdlib.h>
void main5()
{
   int a=10;
   int b=11;
   int *p1=&a;
   int *p2=&b;
   p2=&a;
   if(p1==p2)
   {
	   printf("情敌");
   }else
   {
	   printf("好朋友");
   }
   getchar();
}

指针赋值

#include <stdio.h>
#include <stdlib.h>
void main2()
{
	//指针与整数不能直接赋值,如果需要赋值,强制类型转换
   int *p=(int*)1234;
   //int m=&p;
}
void main3()
{
	//double a[10]={1,2,3,4,5,6,7,8,9,0};
	double a[10]={1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,0.0};
   printf("%d",&a[9]-&a[3]);//元素 6个 指针的减法是根据类型来加一或者减一
   printf("\n%f",*(&a[3]));//4.0000
   //指针的减法
   //0x300500+9*8 - 0x300500+3*8/sizeof(double)
   //指针的加法
   //指针的加法和减法,都有一个类型
   getchar();
}
void main4()
{
	int a [10]={1,2,3,4,5,6,7,8,9,0};
	int *p=a;
	//printf("%d",*++p);//++ 的优先级高于*
	while(++p<=a+9)
	{
		printf("\n%d,%x",*p,p);
	}
	getchar();
}

指针运算

#include <stdio.h>
#include <stdlib.h>
//指针的乘除法没有意义
//加减法就是确定数组的元素之间相隔几个元素
void main1()
{
	//int a=10;
	//int *p=&a;
	//printf("%d",*(p+1));//变量没有初始化
	//system("pause");
	int a[10];
	int i;
	//int *p=a;
	//for(i=0;p<a+10;p=p+2,i++)
	//{
	//  *p=i;//数组的加法移动一个元素
	//}
	int *p=a+9;
	for(i=9;p>=a;p--,i--)
	{
		*p=i;
	}
}

指针高级运算

#include <stdio.h>
#include <stdlib.h>
void mainppp()
{
	double a[10]={1,2,3,4,5,6,7,8,9,0};
	double *p=a;
	//printf("\n%f",*p++);//1
	//printf("\n%f",*++p);// p在上面已经加一了。
	printf("\n%f",++*p);//先取出内容,然后自增 特殊

	//printf("%f",*(p+3));
	printf("\n%f",*p+9);

	//printf("%d",sizeof(*p));//数据类型
	//printf("\n%d",sizeof(*p++));//double 类型
	//printf("\n%d",sizeof(p));//指针类型
	//printf("\n%d",sizeof(p++));//指针类型
	//	printf("\n%f",*p++);//根据指针取出内容,指针自增
	//printf("\n%f",++*p);//先自增指针,再取出内容
	printf("\n%f",(*p)++);//1  () 里面* 优先级最高,a[0]就会发生变化
	printf("\n%f",a[0]);//2

	printf("\n%f",(*p)++);//2  () 里面* 优先级最高
	printf("\n%f",a[0]);//2
	getchar();
}


指针与二维数组

#include <stdio.h>
#include <stdlib.h>
void mainmn()
{
	int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
	int i=0;
	int j=0;
	int *p=&a[0][0];
	int data=1200;
	printf("%x",a);
	
	for(;p<&a[0][0]+12;p++)
	{
	   *p=data;
	   data-=100;
	}

	for(i=0;i<3;i++)
	{
		
	  for(j=0;j<4;j++)
	  {
		  printf("\na[%d][%d]=%d",i,j,a[i][j]);
	  }
	}
}
void main1ppp()
{
  int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
  //int *p=a;
  //int **p=a;
  int(*p)[4]=a;//每个元素都是一个一维数组  指向有四个元素的一维数组
  int i;
  int j;

  printf("%d,%d\n",sizeof(p),sizeof(*p));//p  4, 16 *p=16 说明是指向4个数组的指针
  printf("%d,%d,%d\n",p,p+1,p+2);//相隔16 行指针,每移动
  printf("%d,%d,%d\n",p[0],p[1],p[2]);
  for(i=0;i<3;i++)
  {
    for(j=0;j<4;j++)
	{
		//p 和a 正真等价  2维数组做游戏经常用到
		printf("\n..%d",p[i][j]);
		printf("\n..%d",a[i][j]);
		printf("\n..%d",*(*(a+i)+j));
		printf("\n..%d",*(*(p+i)+j));
	}
  }
  getchar();
}
void main()
{
	int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
	int i;
    int j;
	int(*p)[4]=a;//用一个指向有四个元素的一维数组的指针指向a
		printf("%d",sizeof(a));//48
	printf("\n...%d",sizeof(p));
	printf("\n...%d",sizeof(*p));
	printf("\n...%d",sizeof(*p+1));//列指针只有4个元素 列指针每次移动一个+4 个字节
	for(i=0;i<3;i++)
  {
	  
    for(j=0;j<4;j++)
	{

		//p 和a 正真等价  2维数组做游戏经常用到
		printf("\n..%d,%x",p[i][j],&p[i][j]);
		/*printf("\n..%d",a[i][j]);
		printf("\n..%d",*(*(a+i)+j));
		printf("\n..%d",*(*(p+i)+j));*/
	}
  }
	getchar();
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值