------- IOS培训、android培训、期待与您交流! ----------
指针的定义
定义指针和定义一个变量类似 数据类型 * 指针变量名
如 int * p;表示定义一个指向整形变量的指针p。
使用如下: int a =8;int * p; p=&a;指针变量 p中存放a的地址,可以通过p中存放的地址,可以访问变量a中的值。访问指针变量中存放的地址的值的方式是在指针变量前家上*,如*p=5;就可以将变量a中存放的值改为5;
何时使用指针
#include<stdio.h>
void change(int n)
int main()
{
int a=90;
change(a);
printf("%d\n",a);
return 0
}
void change( int n)
{
n=10;
}
上面这种情况调用完毕之后a的值不发生变化,如果想使传入的值发生变化,则需要传入变量的地址,并且用一个指针变量来接收。修改如下
main函数中修改如下
change(&a);
函数中修改如下
void change(int * n)
{
*n=10;
}
使用指针时的注意
>1如 double * d=10.8; int * p; p=&d;
这样使用会使指针访问不该访问的内存空间,获得不正确的值,这样做很危险。
>2 int *p; p=200;
指针变量只能用来存放地址。
3> int *p; printf("%d",p);
指针变量未经初始化,不要用来间接访问其他存储空间。
4> int *p; int a=8; p=&a; *p=&a;
把地址赋给p中存储的值的对应的存储空间。
指向指针的指针
int a=10;
int *p=&a;
int ** p=&p;
上面是定义了一个指向整形指针的指针。可以通过 *(*pp)来访问变量a中的值
指针的作用2
函数只有一个返回值,当函数想要有多个返回值的时候可以使用指针变量做参数,来接收变量的值,从而返回多个值。
指针的特别注意
在64位编译器下所有的指针都是占用8个字节点额存储空间。
指向数组的指针
int a[10]={1,5,2,52,45};
int *p;
int p=a;
数组名即代表数组的地址,数组在内存中的存放是依次排列。数组名和数组首元素的地址都代表数组的地址。指针指向数组名或者首元素的地址,即可访问数组中的每一个元素。
p+1指针的加以相当于直接加上指向类型的字节数。p指向数组a,*p是a[0]中存放的值,*(p+1)访问的是a[1]的值,也可以使用p[0],p[1]访问数组的首元素,和第一个元素。
指针与字符串
char * name=“it”可以理解为指针变量name指向"it"字符串的首地址字符
输出字符串可以使用printf("%S",name);格式输出符的作用是输出字符直到遇到\0才结束输出。
字符串使用的误区:
#include<stdio.h>
int main()
{
char a[10]="itcast";
a[1]='T';
char *p="itcast";
*p='T';
return 0;
}
指针变量p指向的是内存中的常量区,它是一个字符串常量,对于常量中的字符不可有做修改。
指针与函数
指向函数的指针 int max(int a ,int b)这里定义了一个函数,函数名代表函数的地址。 int (*p)(int ,int)=max;
在这里定义了一个指向函数的指针,max传入函数的地址。可以通过指针调用函数。如(*p)(5,6);