作用:指针可以间接访问内存,记录地址编号
1定义指针int *p //定义了P指针
p=&a //取址,获取a的地址
比如
cout<<"a的地址"<<&a< cout<<"P的值为"<
效果是一样的 //指针就是记录地址 通过解引用的方式使用指针,指针前加一个*,找到数据 int *p=NULL; 指针变量指向非法的内存空间
int a=2;
int *p;
p=&a;
p=1000;
cout< 输出的都是1000
3指针占用的内存
在32位操作系统下,指针始终占据四个字节空间(x86)
cout<
4 空指针
空指针用于指针变量初始化,空指针是不可以访问的
*p=100;//会报错
原因:0-255之间的内存编号是系统占用的,因此不可以访问
例如:
int*p=(int *)0x1100;
cout<<*p<
但是cout<
1修饰指针:常量指针
const int *p=&a
指向可改,值不可改
2修饰常量:指针常量
int * const p=&a
值可以改,指向不可以
3双修
const int *const p =&a
都不可以改
7数组指针数组名就是数组的首地址
创建指针指向数组名
arr[10]={1,2,3....};
int *p=arr;
cout<<*p;输出的就是arr[0]
8指针与函数地址传递,
函数调用:数组本身就是首地址,一般无需加&
一维数组与二维数组有很大区别:
8.1一维数组函数声明:
可以使用以下两种声明方式,一般使用第一种
函数调用时:
juzhen(a,b);
直接操作的原来的矩阵
8.2二维数组函数声明:有两种方式
8.2.1一种是之前编写函数的时候用的这种:
但是需要表明矩阵大小,使用也不方便
8.2.2另外一种是如同一维数组:
虽然定义很方便,但是在函数内部需要当作一维数组来用,
a[i*xx + j]
以下是对二维数组的求和函数
#includeC++引用#define ROW 2 //二维数组的行数 #define COL 2 //二维数组的列数 //4个版本的求和函数 //方式一:数组形式 int TwoDimArraySum1(int twoDimAr[][COL], int row, int col); //方式2:指针形式,pr是一个指向int的指针 int TwoDimArraySum3(int *pr, int row, int col); int main(void) { int twoDimArray[ROW][COL] = {{-2, 5}, {4, 9}}; int result; //方式一 result = TwoDimArraySum1(twoDimArray, ROW, COL); printf("Sum1函数结果:%dn", result); //方式二 result = TwoDimArraySum2(twoDimArray[0], ROW, COL); printf("Sum3函数结果:%dn", result); return 0; } int TwoDimArraySum1(int twoDimAr[][COL], int row, int col) { int i, j; int result = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { //下面两种寻址方式都行 result += twoDimAr[i][j]; // result += *(*(twoDimAr + i) + j); } } return result; } int TwoDimArraySum2(int *pr, int row, int col) { int i, j; int result = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { //下面两种寻址方式都行 result += pr[i*col + j]; // result += *(Pr + i*col + j); } } return result; }
引用的含义就是起个别名,等同于a,b同时操作一块地址
用法:
类型 &别名=原名
注意事项1引用必须初始化
2引用一旦定义不可以修改
但是赋值是可以的:
##引用的函数传参##使用引用让形参修饰实参,地址传递与引用传递的区别:
//2. 地址传递
void mySwap02(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
//3. 引用传递
void mySwap03(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
调用方式:
地址传递主函数要引用,引用传递主函数不用引用
mySwap02(&a, &b); mySwap03(a, b);
引用的本质是指针常量



