字符串
#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();
}