关于C指针的简单用法

1.简单的定义指针

#include<stdio.h>
int main(){
int a=12;
int *point =&a;
printf("%d\n",*point);
return 0;
}

假设a=15,这个数字15放在内存地址24459963的位置,上面代码中 point 表示a的地址也就是24459963,而*point代表a的值12

2.指针在函数中的使用

#include<stdio.h>
void increment(int *point){
	(*point)++;
}
int main(){
	int a=10;
	increment(&a);
	printf("%d\n",a);
	return 0;
}

上述代码输出结果是11,在调用函数increment( )时候,函数会新建一个空间是指针point指向这个空间,当函数调用结束后increment()生成的空间被销毁,因此必须指定函数执行结果所在位置,调用函数时候需要&a,得到a的地址,让函数在原来的地址,执行a的内容自加一
常见的错误写法

#include<stdio.h>
void increment(x){
	x++;
}
int main(){
	int a=10;
	increment(a);
	printf("%d\n",a);
	return 0;
}

上述代码执行结果是10,无法实现a自加一。

3.函数不指定类型的双层指针内容修改

#include<stdio.h>
void mov(int **point,arr[]){
	*point=&arr[1];
}
int main(){
int arr[]={1,2,3,4,5};
int *p=arr[0]; 
mov(&p,arr);
printf("%d\n",*p);
return 0;
}

上述代码实现在不开辟新的指正情况下让原来指向arr[0]的指针修改为指向arr[1];
对下面这行代码

mov(&p,arr);
此时p是arr[0]的地址,**point可以理解为point->p->arr[0];也就是**(&p),
也就是*(p) 也就是arr[0],调用函数时候*(&p)=&arr[1],也就是 p=&arr[1]

修改了原来p的内容,即将原来arr[0]的地址替换成arr[1]的

4.函数指定类型的指针内容修改

#include<stdio.h>
int* mov(int *point,int arr[]){
	point=&arr[1];
	return point;
}
int main(){
int arr[]={1,2,3,4,5};
int *p=arr[0];
p=mov(p,arr);
printf("%d\n",*p);
return 0;
}

由函数前面的 int* 将其定义为int指针,实质是双层指针mov( )函数返回一个地址,将该值赋给p,使得指针*p指向新的值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔二梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值