C++中的指针问题(一)

  • 在C++语言中指针是个非常重要又神奇的东西,搞懂指针就非常的重要。下面首先介绍一下指针的基本作用:
    指针是对某一类型数据(可以是int、char、string、double以及结构或类……)的间接使用。指针本质是存储变量的地址。其表示符号为” * “,此符号表示指针(也可以把指针当作是与int等相同的一种变量类型)。具体以下面的例子说明:
//……此处省略预处理……
int i = 5;
int* p;     //p是一个int型的指针,或者说p是一个指向int型的指针
cout << &i; //这里是输出i的地址
//刚刚说过指针是用来存储一个变量的地址的,这里可以将指针p用来存储变量i的地址:
p = &i;     //把变量i的地址赋值给p
cout << p;  //这里同样是输出变量i的地址,与前面的cout<< &i一样,如果要通过指针输出i的内容则需要加上*(指针)
cout << *p; //这里输出的是i的内容5,和cout<<i等效

指针的另一个作用就是可以通过指针来间接改变源地址中的内容,比如下面的代码片段,我想通过指针来改变一个整形数的值:

int i = 5;   //原来的i的值
int* p;
p = &i;      //这里采用的是先定义指针p然后给指针p赋值,也可以定义的同时就赋值:
//int* p = i; //注意:这里的赋值不再是&i了,因为p前面有个*号,这代表着给p所表示的地址赋值即i的值赋给p
*P = 8;  //通过指针将p所存储的地址的内容改为8
cout << i; //此时输出为8

这里需要注意的是,要通过指针p改变变量i的值,则必须用*p,而不能用 p = 8,这样表示的是指针p存储的地址为8会产生编译错误。

此外,指针也可以用于指向数组变量,但与其他变量不同的是,当指针用于指向数组变量时(存储数组变量的地址时),赋值如下:

int a[5] = {1, 2, 3, 4, 5};
int* p;
p = a; //这样就相当于将数组a的首地址给了p,而不是 p = &a
//这里也可以通过指针输出数组里的其他值
cout << *(p + 2); //输出a[2]的值,也可利用for循环全部输出
for(int i = 0; i < 5; i++)
    cout << *(p++) << endl;
  • 指针的所占空间大小的问题。不论数据类型是int,char,float还是double类型,其指针均占4Byte空间,但若测量具体值时,则视相应类型有不同。例如:
int* p;
char* i;
double* q;
float* j;
cout << sizeof(p) << endl; //输出4
cout << sizeof(i) << endl; //输出4
cout << sizeof(q) << endl; //输出4
cout << sizeof(j) << endl; //输出4
int a = 5;
p = &a;
char b = 'a';
i = &b;
double c = 5.5;
q = &c;
float d = 5.5;
j = &d;
cout << sizeof(*p) << endl; //输出4
cout << sizeof(*i) << endl; //输出1
cout << sizeof(*q) << endl; //输出8
cout << sizeof(*j) << endl; //输出4

如有错误,欢迎大家批评与指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值