c++ day3 指针入门,const修饰指针,指针和数组和函数

1,指针定义

指针就是记录地址

1指针定义

数据类型*指针变量名

int a = 10     //定义一个变量

int * p          //定义一个指针变量

p = &a        //取a 的地址赋给p    &是取址符

int *p         //定义一个指针变量并且指向一个地址,使p为一个地址

 int *p是创建一个指针变量,所以int *p = &a;可以等于一个地址

*p是对p这个地址解引用,来找到地址对应的内存,两者不是一个概念

 2,指针可以通过解引用的方法来找到指针指向的内存

指针前加一个星号

*p = 1000      //p是a的地址,*p就是通过地址的到a的值  ,然后直接将内存里的值改成了1000,

cout << a <<       //这里的a已经为1000了

指针所占用的内存空间大小   sizeof(int *)或sizeof(p)     {32位4字节,64位8字节} 

3.空指针,野指针

空指针:指针指向地址编号为0的空间(初始化指针变量)

int * p = NULL;                        (需要先有头文件stdlib.h)

*p = 100;   错误:空指针不可以访问

野指针:z指针指向非法的内存空间

比如int * p =(int*)0x1100                //0x1100是一个十六进制的数,前加(int*)可将其强转成一个地址

这个地址没有申请,没有权限去操作,编译无错,运行会出错

4,const修饰指针

1.const修饰指针

2.const修饰常量

3.const修饰指针,也修饰常量

如int a=10;

int b =10;

 1.const 修饰指针-------常量指针

 const int *p = &a;                   // 指针的指向可以修改,但指针指向的值不可以修改

可这样理解:const修饰的是*p,即*p解引用的值被固定了

*p = 20;                错误,不能改p所指向地址的值

p = &b;                  正确,指向可以修改

2.const修饰常量----------指针常量

int * const p = &a;            // 指针的指向不可以修改,但指针指向的值可以修改

可这样理解:const修饰的p,即指针p的地址被const固定,变成常量

*p = 20;   正确

p = &b;    错误

 3.const修饰指针,也修饰常量

const int * const p = &a             //都不可修改

5,指针和数组

int *p = arr    //因为数组名就是数组的首地址,输出*p自动输出数组第一个数值

cout << *p   //这里输出的是数组的首位

p++        //因为数组是整型,每个数字4字节,这里的p++代表p往后偏移了4个字节,变成了数组第二位的地址

cout << *p  //这里输出的数组二位

int main()
{
	int arr[3] = { 1231,23,3 };
	int *p = arr; 
	for (int i = 0; i < 3; i++)
	{
		cout << *p << endl;
		p++;
	}
	system("pause");
	return 0;
}

指针遍历输出数组

6,指针和函数

1,值传递时,形参的改变不影响实参的值

2.地址传递时,形参的改变影响实参的值

void swap(int *a, int *b)            //定义了两个指针来接收两个值的地址
{
	int temp = *a;                    //这里代表这两个地址所表示的值发生了互换,所以max和min            
                                        所表示的值也发生了互换
	*a = *b;
	*b = temp;
	cout << "*a" << *a <<endl;
	cout << "*b" << *b << endl;

}

int main()
{
	int max = 10; int min = 1;
	swap(&max, &min);                //将两个值的地址传到函数中,用两个指针来接收
	cout << max << endl;
	cout << min << endl;
	system("pause");
	return 0;
}

值传递:主函数定义的变量的值赋给了调用函数上新定义的变量,所以新定义变量之间的改变不影响主函数上变量的值

地址传递:主函数定义变量值的地址传给了调用函数上新定义的指针,所以指针的解引用改变了地址所代表的值,因此主函数变量的值也要发生改变

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值