C Primer Plus学习笔记03

指针的操作
操作 效果
ptr=&a 赋值 需要注意指针的类型和地址的类型需要相同
*ptr 取值 得到指针指向的地址所存储的值
&ptr 取指针的地址 需要存放在**ptr2 这样的类型中 它表示指向指针的指针
ptr+1或者ptr++ 效果等同于指向数组的下一个元素
ptr-1或者ptr-- 效果等于于指向数组的前一个元素
ptr2-ptr 表示两个指针相间隔的元素的数目

注意:指针不可以相加 也不能进行乘除运算

利用指针传递数组


  • 如果传递的数组是允许改变的 直接利用指针传递即可
  • 如果传递的数组是不允许改变的 使用const修饰指针:const int * ptr 这样的话在你试图修改数组的时候 编译器会报错
关于const的其他内容


  • const int* ptr
  • 表示指向常量的数组
  • 允许改变其指向的地址 不允许修改其指向的地址所表示的值
  • int* const ptr
  • 表示常量类型的指针
  • 允许修改器指向的地址所表示的值 但是不允许修改其指向的地址
  • 将常量或非常量数据的地址赋给指向常量的指针是合法的 但是将常量数据的地址赋给普通指针是非法的
指针和多维数组

假设有一个二维数组 声明为:int arr[4][2]

  • arr == &arr[0]
  • arr[0] == &arr[0][0]
  • arr的类型为:int (*ptr) [4] 它是指向一个拥有4个int类型大小的数组的指针
  • arr[0]的类型为:int *ptr 它是一个指向int类型的指针
  • *arr==&arr[0][0] 因为arr存放第一行数组的首地址 对其求值就代表第一行数组 而一个数组代表的是该数组第一个元素的首地址
  • **arr == arr[0][0] 两次取值就是取出了数组中的元素的值 所以二维数组名必须取两次值才可以取出数组中存储的元素

注意 把非常量的地址赋给指向常量的指针是允许的 但是当有两层以上的间接运算符的时候 就不再安全了

多维数组作为函数形式参数

需要使用如下形式 void function(int arr[][4]) 第一个方括号代表了这是一个指针

你可能感兴趣的:(C Primer Plus学习笔记03)