7指针
一、指针
1.指针就是存放地址的变量。一个指针变量占用4个字节。int* pa;//int * pa;
2.指针类型、取地址、解引用
1)指针类型
int* pa;//pa,*pa
int *pa;
int * pa;
语义:pa是一个指针,该指针指向一个int型的数据,即pa存放一个int型数据的地址。
int* pa, pb; // pa是int*,pb是int
int *pa, *pb;
2)取地址——& &
int a=5;
int* pa = &a; // pa指向a,a是pa的目标,pa是a的指针,pa中存放着a的地址。*pa
3)解引用(取目标)——*
*pa = 100; // 将100赋值给pa的目标,即赋值给a pa=100;
3.指针的用法//int add(int* p);
1)将指针作为函数的参数,传递变量的地址,进而在多个函数中访问相同的内存数据。
2)指针也可以作为函数的返回值,但是不要返回指向局部变量的指针。因为函数返回以后,其局部变量所占用的内存将随函数栈一起被释放,所得到的指针为野指针。
int add()
{
int* p;
....
return p;
}
4.常量、常量指针和指针常量
1)const可以修饰普通变量,该变量就会被当做常量来处理,即其值一经初始化就再不能被修改。
2)常量指针:指向常量的指针,即无法通过该指针修改其目标。
const int* p;
int const* p;
3)指针常量:指针型的常量,即无法修改其值的指针。
int* const p;
const int* const p; // 常量指针常量,p本身不能改,其目标亦不能改
const的用法 #include <stdio.h> //游戏、不想被其他人修改自己写的代码,要用const int main() { const int a=1000; //a=200;//a属于常量,不能修改 int b=10000,c=20; const int* p=&b;//常量指针 //*p=1;//不能通过其目标去修改 p=&c; printf("%d\n",*p); int* const p1=&b;//指针常量 //p1=&c;//不能通过其地址去修改 *p1=1000000; printf("%d\n",*p1); const int* const p2=&b;//常量指针常量 //*p2=300;//不能通过其目标去修改 //p2=&c;//不能通过其地址去修改 return 0; }
模拟计算机寻找某个文件 #include <stdio.h> int main() { char st[20];//相当于新建一个文件夹 char* ps; int i,j=0;//i用来循环遍历我们的文件夹,j用来统计文件出现了多少次 printf("请输入一个字符串:\n"); ps=st;//指向数组的首地址 scanf("%s",ps); for(i=0;ps[i]!='\0';i++)//文件夹的遍历 if(ps[i]=='7') printf("文件夹中出现‘7’字符%d次\n",++j); if(j==0) printf("文件夹中没有‘7’字符\n"); printf("文件夹中共出现‘7’字符%d次\n",j); system("pause");//暂停 getch() 等待输入 return 0; }