zoukankan      html  css  js  c++  java
  • C语言学习笔记-8.指针

    一、什么是指针

    1.指针是存放另一个变量内存地址的变量

       指针型变量的长度为4个字节,32位

    2.宏定义NULL,表示0

       良好的编程习惯:暂时不使用指针时,将其值设为NULL

    3.指针定义后,若未被初始化,则其值为0xCCCCCCCC(Visual Studio中)

       若访问此地址,则程序崩溃

    4.指针作用:对主函数中实参变量值进行修改

       例:void get(int *input) {

                 scanf(“%d”, input);             //注意:不能写成&input

             }

    二、指针与数组

    1.指针的加减运算以数据元素为单位,而不是字节

       *(a + k)等价于a[k]          &a[k]等价于a + k

    2.指针与数组的区别:数组是有存储空间的,能够存储数据

                                  指针只能用来存地址,没有存储空间

    3.动态数组:例:Scores = (int *)malloc(num * sizeof(int));

                            if(Scores == NULL)

                                goto Error;

      注意:malloc函数返回void类型空指针,故须强制类型转换

               需加入错误处理

               可使用数组下标法和指针法访问

      静态数组存储于栈帧中,动态数组存储于堆中

    4.动态数组使用后需使用free(…);释放

    5.指针数组:例:void main(int argc, char *argv[])

                            argc:存放参数个数(包括程序名), argv中元素是基类型为字符的数组

    6.指向指针的指针

       例:void get(int **array) {

                 *array = (int *)malloc(count * sizeof(int));

             …}

       将主调函数中的地址,传到被调用的函数中,那么形参和实参均为指针

       将被调用函数中的地址,传到主调函数中,那么形参和实参均为指向指针的指针(也可以采用函数返回值)

    7.二维数组与指针

       在C语言中存放一个二维数组时,并不会存放二维表格,而是顺序存放,即一个接着一个存放

       a[i][j]:对应地址:a + k * sizeof(int),k = i * 每行元素个数 + j

       a[i]:一维数组,例:a[0] + 1指向a[0][1]

       a:指向固定长度的一维数组,每一步跨度为该数组长度,例:a + 1指向a[1]

    8.若调用a[i][j]:

    对一行操作:test1(a[i]);      test1中参数:int *pa 或 int pa[] 或 int pa[4]

    对数组操作:test2(a);         test2中参数:int (*arr)[4] 或 int arr[][4] 或 int arr[3][4]

    9.动态二维数组

       例:a = (int (*)[4])malloc(nRows * nCols * sizeof(int));

    三、指针与字符串

    1.字符’’的ASCII码为0

       注意:在定义字符数组时,须为’’预留一个数组元素的空间

    2.如果用指针指向一个字符串常量,那么该指针中存放的是该字符串的首地址

    3.数据段是编译器用来存放字符串常量的地方

       程序员不需要申请或释放它,且字符串常量一般是只读的

    4.字符串的访问:整个字符串:str 或 p(指针)

                            某个字符:str[i] 或 *(p + i)

  • 相关阅读:
    【19】什么时候该改变开发集和评估指标
    【18】训练/开发/测试集划分
    【17】满足和优化指标
    【16】机器学习中的单一评估指标
    【15】ML项目流程与正交化
    【14】Softmax回归
    【13】正则化网络激活函数(Batch归一化)
    【12】超参数及超参数的选择
    【11】神经网络的优化算法
    06-----Nodejs介绍
  • 原文地址:https://www.cnblogs.com/trj14/p/4285076.html
Copyright © 2011-2022 走看看