#include<stdio.h>
//指针变量使用规则
int main(int argc,char*argv[])
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int *p = a;//int *p=&a[0]两者等价
int i = 0;
while (i<sizeof(a)/sizeof(a[0]))
{
printf("p[%d]=%d,&p[i]=0x%p",i,p[i],i,&p[i]);//使用指针下标进行表示
++i;
}
printf("******************");
while (i<sizeof(a) / sizeof(a[0]))
{
printf("p[%d]=%d,&p[i]=0x%p", i, *(p+i), i, p+i);//使用指针*进行表示 *(p+i)等价与p[i] p+i等价于&p[i]
++i;
}
printf("******************");
while (p-a<sizeof(a) / sizeof(a[0]))//指针偏移法,两个指针相减
{
printf("a[%d]=%d,p=0x%p", p-a, *p,p++);
++i;
}
while (*p)
{
printf("a[%d]=%d,p=0x%p", p - a, *p, p);
++i;
}
printf("******************");
do
{
printf("a[%d]=%d,p=0x%p", p - a, *p, p);
} while (*p++);
return 0;
}
2.指针变量做形式参数时候,经常用于改变主调函数实际参数(使用*或者下标来操作实参)
#include<stdio.h>
void Swap(int a, int b)//该函数并不能将两个整数进行交换,未改变了实惨
{
int t = a;
a = b;
b = t;
}
void Swap1(int *a, int *b) ///该函数并不能将两个整数进行交换,未改变了实惨
{
int* t = a;
a = b;
b = t;
}
void Swap1(int *a, int *b)//该函数并将两个整数进行了交换,改变了实惨
{
{
int t = *a;
*a = *b;
*b = t;
}
void Swap2(int &a, int &b)
{
int t = a;
a = b;
b = t;
}
int main()
{
int i = 10, j = 20;
Swap(i,j);
printf("i=%d,j=%d\n", i, j);
Swap1(&i,&j);
printf("i=%d,j=%d\n",i,j);
Swap2(i, j);
printf("i=%d,j=%d\n", i, j);
return 0;
}
3.查找字符串
#include<stdio.h>
void Reverse(char str[])
{
char*p = str;
while (*p)
++p;
while (--p > str)
{
char t = *p;
*p = *str;
*str = t;
++str;
}
}
int StringFind(char *str, char a)//查找字符串
{
int i = 0;
while (*str)
{
if (*str == a)
return i;
++i;
++str;
}
printf("总共有%d个选中的字符%c",i,a);
return -1;
}
int main()
{
char s[20];
scanf_s("%s",&s,sizeof(s));
puts(s);
Reverse(s);
puts(s);
StringFind(s,' ');
return 0;
}