首页 > 代码库 > c++指针笔记一
c++指针笔记一
左值和右值的区别:
左值就是在赋值中可以放在赋值操作符两边的值,比如:
int a = 1;
double b = 2.0
a = b;
b = a;
这里a和b都是左值,一切变量都是左值,但const量是例外。
而右值则是只可以放在赋值操作符右边的值,比如:
int a = 0;
char *b = "hello";
3 = a; // ERROR
"howdy" = b // ERROR
这里3和"howdy"都是右值,所以不能放在赋值操作符左边,一切常数、字符和字符串都是右值。
指针变量的声明与初始化
1.指针包含的是包含特定值的变量内存地址,变量名直接引用数值,而指针是在间接引用数值。
2.值为0或null的指针称为空指针。
3.声明方式为:int *Ptr;
4.指针运算符为&:
int y=5; int *yPtr; yPtr=&y;
以上语句表示,将变量y的地址赋值给指针yPtr,或者也可以说让指针yPtr指向变量y
5.运算符的应用:
#include<iostream>
using namespace std;
int main(){
int a;
int *aPtr;
a=7;
aPtr=&a;
cout<<"The address of a is "<<&a<<endl;
cout<<"The value of aPtr is "<<aPtr<<endl;
cout<<endl;
cout<<"The value of a is "<<a<<endl;
cout<<"The value of *aPtr is "<<*aPtr<<endl;
cout<<endl;
cout<<"Showing that * and & are inverses of each other."<<endl;
cout<<"&*aPtr = "<<&*aPtr<<endl;
cout<<"*&aPtr = "<<*&aPtr<<endl;
return 0;
}
6.函数按值传递和按指针传递参数
按数值传递
int cuberByValue(int );
int main(){
int number=5;
cout<<"The original value of number is "<<number<<endl;
number = cuberByValue(number);
cout<<"The new value of number is "<<number<<endl;
return 0;
}
int cuberByValue(int number){
return number*number*number;
}
按引用传递
void cuberByReference(int *);
int main(){
int number=5;
cout<<"The original value of number is "<<number<<endl;
cuberByReference(&number);
cout<<"The new value of number is "<<number<<endl;
return 0;
}
void cuberByReference(int *nPtr){
*nPtr=*nPtr* *nPtr* *nPtr;
}
7.const修饰指针
a.指向非常量数据的非常量指针:权限最大,如int *aPtr;
b.指向常量数据的非常量指针:即你可以改变指针的指向方向,但不能通过指针修改数据。
比如改变指针的指向:
int main(){
const int *aPtr;
int x=4,y=5;
aPtr=&x;
cout<<"指向变量x时指针的值: "<<*aPtr<<endl;
aPtr=&y;
cout<<"指向变量y时指针的值:"<<*aPtr<<endl;
return 0;
}
这样的操作是允许的
但通过指针修改数据:
int main(){
const int *aPtr;
int x=5;
aPtr=&x;
cout<<*aPtr<<endl;
x=6;//允许修改数据
cout<<*aPtr<<endl;
*aPtr=100;//不允许
return 0;
}
c.指向非常量的常量指针:即可以通过指针修改数据,但不能改变指针的指向。
int main(){
int x=5;
int * const aPtr=&x;
cout<<*aPtr<<endl;
*aPtr=6;//允许修改数据
cout<<x<<endl;
int y=7;
aPtr=&y;//不允许修改指向
return 0;
}
d.指向常量数据的常量指针:权限最小,既不允许修改指针方向,也不能通过指针修改数据;
int main(){
int x,y=5;
const int * const aPtr=&x;
cout<<*aPtr<<endl;
*aPtr=6;//不允许修改数据
aPtr=&y;//不允许修改指向
return 0;
}
c++指针笔记一