c语言【指针】

指针

指针是变量,存放内存单元的地址。

int a=10;   //在内存中开辟一块空间
int *p=&a;  //对变量a取地址,变量a的地址存放在变量p中,此时p就是一个	指针变量

各个类型指针所占字节数

sizeof(char*);  //4
sizeof(short*); //4
sizeof(int*);   //4
sizeof(double*);//4

//=================
int a=0x11223344;
int *pa=&a;
char *pc=&a;
printf("%p\n",pa);//0061fec4
printf("%p\n",pc);//0061fec4
//==================
*pa=0;//在内存地址中显示:00 00 00 00
*pc=0;//在内存地址中显示:00 33 22 11
/*
指针类型决定了指针进行解引用时,访问空间大小
char* 类型解引用可以访问1 byte
int*      4 byte
double*   8 byte
*/

指针步长

//指针类型决定指针步长
char *cp;  //cp+1 偏移 1 byte
int *ip;   //ip+1 偏移 4 byte
double *dp;//dp+1 偏移 8 byte

数组首地址

int arr[5]={
   0};
int *p=arr; //此时arr表示数组首元素地址 == &arr[0]
for(int i=0;i<5;i++){
   
	*(p+1)=1; //讲数组中每个元素都置为1
}

野指针:指向的位置是不可知的

/*
避免野指针
1.初始化指针
2.小心指针越界
3.指针指向空间释放即置位NULL
*/
int* test(){
   
	int a=10;
	return &a;
}
void main(){
   
//调用完test之后a的地址空间将归还给系统,此时对该地址操作系统异常
	int *p=test(); 
	*p=20;
}

指针地址加、减

int values[5];
int *vp;
for(vp=&values[0];vp<&values[5];){
   
	*vp++=0; //vp先与*结合将该值置位0,然后++
}
//数组中根据某两个元素地址,求元素之间个数
int arr[]={
   1,2,3,4,5,6,7};
int len = &arr[6] - &arr[0]; //len=6

//求字符串长度
int len(const char *str){
   
	char *begin = str;
	char *end =str;
	while(*end != '\0'){
   
		end++;
	}
	return end - start;
}
//=======================
float v[5],*vp;
for(vp = &v[4];vp>&v[0]) *--vp=0;
for(vp = &v[4];vp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值