黑马程序员__c语言指针

------- 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);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值