zoukankan      html  css  js  c++  java
  • C指针 指针和数组 二维数组的指针 指针应用

    直接到变量名标识的存储单元中读取变量的值——直接寻址

    通过其他变量间接找到变量的地址读取变量的值——间接寻址

    指针变量存放地址

    显示变量的地址

    指针变量使用前必须初始化,若不知指向哪,可先指向NULL。

    指针的解引用——通过指针访问指针指向的值

     

    此*非彼*

    int *p=&a;    *作为指针的说明符定义变量

    *p=1;           *间接运算符,用于访问p指向的变量值

    pa是指向a的指针变量,pa存放a的地址

    只要pa指向a,*pa就是a的别名

     

     利用指针实现两数交换

    a和b的地址值分别传给形参x和形参y,执行完语句后形参x指向实参b,形参y指向实参a,形参互换了,但实参并没有互换。

     函数指针

    result=(*f)(a,b);   已经有了指向的函数

     

     

    指针的算术运算

     

     ++(*p)   先读出p所指向的存储单元的数据,然后数据执行+1操作,输出6,不改变指向

    (*p)++ 先读出p所指向的数据,输出5,然后数据执行+1操作,不改变指向

    *p++  单目运算符优先级相同,右结合 ,相当于*(p++) 先使用表达式的值(先使用p取出p指向的存储单元的数),后对p执行+1操作,将p指向下个单元(改变指向)   

     

    重要:二维数组的指针

    其实,在二维数组中,*(a+i)数组元素并不存在,又是另外一个数组的数组名,也是一个地址值,表示第i行第0列的地址

    *p两边的圆括号不能省

    int (*p)[3]    

    指针变量p的类型是int[3]型

    a  第0行int[3]类型的元素

    用二维数组名对其初始化,二维数组的数组名代表了二维数组的行地址

     

     

     第二种定义方式:

    此处的*a也是二维的定义 *(a+0)+0

    表示a[i][j]元素前有i行j列

     注意区分行指针与列指针  

    行指针:p首先指向第0行,然后p+i定位到第i行,然后p+i进行解引用(*(p+i))把行地址转化为列地址,在得到第i行第0列地址后在加j得到第i行第j列地址,在进行解引用得到a[i][j]

    列指针:p直接指向了第0行第0列,找出a[i][j]相对于a[0][0]的偏移量,i*n+j

    二维数组的应用

    空间利用率低,最好引用参差不齐的数组类型

     country数组中的每个元素都是一个字符指针,字符数组指针只是保存了这些字符串的首地址

    只要用country[i]给出第i个字符串的首地址,即可给出第i个字符串。

    访问指针数组指向的字符串和访问二维数组中的字符串方式相同 

    字符串的排序

    物理排序,改变了字符串实际保存的物理位置。

    交换的是第i个字符串和第j个字符串的首地址

  • 相关阅读:
    接口测试再思考
    Python开发简单爬虫
    正则表达式(Python)
    Git常用方法
    CNN--卷积神经网络从R-CNN到Faster R-CNN的理解(CIFAR10分类代码)
    一看就懂的K近邻算法(KNN),K-D树,并实现手写数字识别!
    我是这样一步步理解--主题模型(Topic Model)、LDA(案例代码)
    你想知道的特征工程,机器学习优化方法都在这了!收藏!
    从似然函数到EM算法(附代码实现)
    一次性弄懂马尔可夫模型、隐马尔可夫模型、马尔可夫网络和条件随机场!(词性标注代码实现)
  • 原文地址:https://www.cnblogs.com/sunshine88/p/8717995.html
Copyright © 2011-2022 走看看