C语言指针基础知识

* 和 & 用法

  • * 就是取指针所指地址处保存的数值,
  • & 就是去一个变量的地址。

例如:

int a=10;  
print("\n%d",&a); //打印出来的是a的地址  
print("\n%d",*(&a); //打印出来的是10  

数组名代表数组的首地址,数组指针的加减可以实现指针指向数组上一个或者下一个元素的功能

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

指针数组

int a = 16, b = 932, c = 100;  
// 定义一个指针数组
int *arr[3] = {&a, &b, &c};//也可以不指定长度,直接写作 int *arr[]  
// 定义一个指向指针数组的指针, 指向数组第0个元素
int **parr = arr;  
printf("%d, %d, %d\n", *arr[0], *arr[1], *arr[2]);  
// *parr 数组第0个元素的值,也是指针, **parr是第0个元素的值
printf("%d, %d, %d\n", **(parr), **(parr+1), **(parr+2));  

下标和指针的关系

p[i] 等价于 *(p+i)

int a = 1;  
int *b = &a;  
b[1] = 12;  
*(b + 1) = 77;  // 上面这条命令和这条命令是等价的
cout << b << endl<< b[1] << endl << &b[1] << endl;

// 用指针的形式遍历
for (int i = 0; i < sizeof(b)/ sizeof(b[0]); ++i) {  
    cout << *(b+i) << endl;
}

参考文档