zoukankan      html  css  js  c++  java
  • sizeof,数组,指针

    sizeof计算数据类型或变量长度(包括‘’),如果计算的变量是一个表达式或函数,只与其最终结果或返回值的类型相关,表达式并不计算,函数也不进行执行。注意计算字符串时计算,而strlen不计算。

    int a[10];

    sizeof(a)//计算的就是整个数组的长度,为40; &a,表示取出整个数组的地址,sizeof(&a)=4,sizeof(*&a)=40

    其他情况,数组名a均退化为指针。

    动态数组的创建和释放
    (1)一维数组:
    int* arr = new int[n];
    delete[] arr;
    (2)二维数组:
    int** arr = new int*[row];
    for (int i = 0; i < row; i++)
    {
        arr[i] = new int[col];
    }
    for (int i = 0; i < row; i++)
    {
        delete[] arr[i];
    }
    delete[] arr;

    指针数组:int* arr_ptr[5];  这是一个元素全部是指针的数组

    数组指针:int (*arr_ptr)[5]; 这是一个指针,指向了一个数组

    以下个人理解,不保证正确:

    int arr[5] = { 1,2,3,4,5 };

    arr的本质并不是一个地址,而是一个地址加一个大小,表示的是整个数组

    输出arr, &arr, &arr[0]的值是相同的,但是arr本质并不是一个地址,而是一个完整的数组,包含arr[0]的地址和数组的大小,当函数调用的时候arr才从数组退化为指针。

    而int (*ptr)=&arr;表示ptr指向了数组arr, (*ptr)[i]=arr[i]。ptr+1指向的是arr[4]后面的地址。

    void类型指针,可以储存任意类型的对象的地址。

    指向常量的指针:指针不能改变所指对象的值,但是可以改变所指对象。

    const int *p=&a;

    指针类型常量:不可改变所指对象

    int * const p=&a;

    指针型函数,返回值为指针的函数

    int* a(){

      return int*;

    }

    指向函数的指针:

    int B(double) { return int; }

    int (* A)(double);

    A  a;

    a=B;

  • 相关阅读:
    LeetCode 169. Majority Element
    Object-c block块
    Object-c动态特性
    Object-c基础(2)
    Object-c基础
    LeetCode171:Excel Sheet Column Number
    LeetCode242:Valid Anagram
    LeetCood8:String to Integer
    理解qsort 中的 cmp
    google goble cache
  • 原文地址:https://www.cnblogs.com/spock12345/p/11558399.html
Copyright © 2011-2022 走看看