c++指针个人理解

定义

int* p;

int a = 10;此时内存中有一个块会属于a,并且对应的值为10

p = &a;上面的块会有个地址,&符号是“取地址”,将a的地址赋给p,此时指针p储存的是a的地址(例如0x0011)

*p ;*符号是“解引用”,返回p地址指向的,即为a,也就是10。

连起来写就是:

int *p = &a;

cout << *p << endl;
cout << a << endl;

结果都是10

cout << p << endl;

结果为a的地址

通过指针可修改元素值:*p = 1000;,这时*p和a输出都变为了1000.

利用指针访问数组元素

int *p = arr;

 数组名就代表数组的首地址,此时如果输出*p,返回的是数组第一个元素;

通过语句

p++;

 即可遍历数组,代码如下;

int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
int* p = arr;
for (int i = 0; i < 10; i++) {
	cout << *p < endl;
	p++;
}

指针和函数

值传递:形参改变,实参不变

地址传递:形参实参都改变

void swap(int* p1, int* p2) {
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}
int main(){
    int a = 10;
    int b = 20;
    swap(&a, &b);
}

注意:*和&符号不能少,相当于是将a的地址传到了函数体里面了

上述代码运行过程:

先在内存中创建一个块,名字为a,值为10;

接着创建b,值为20;

执行swap(&a, &b);传入函数:void swap(int* p1, int* p2),

相当于int *p1 = &a;int *p2 = &b;

先创建p1,储存a的地址,再创建p2,储存b的地址

接着执行语句int temp = *p1; 创建temp,值为*p1,也就是p1对应的a的值,为10;

*p1 = *p2;将p1指向的a值改为p2指向的值---20;
*p2 = temp;将p2指向的b的值改为temp的值---10;

此时程序运行结束,实参a、b都改变了

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值