zoukankan      html  css  js  c++  java
  • [轉]Array of pointer VS. Pointer to Array

    。前言

    這是二年級Programming Languages(語言結構)課程中有的內容,教導我們如何斷定一種複雜型態的方法,不過就在經過一年後的最近,我已經忘的差不多了,,在這上面的判斷上又錯誤了,而且還沒有頭緒處理,只能try on'error的將我要的部分測出來用。

    。問題

    請問下列的兩種宣告各為 Array of pointer 與 Pointer to Array的哪一種?

    int (*ptr)[10]; // no.1
    int *ptr[10]; // no.2

    。解題方式 - 非正規方法

    依照優先權來判斷,優先權:()等於[]大於*

    int (*ptr)[10]; // no.1

    小括號()的優先權等於中括號[]的優先權,不過運算處理順序是由左至右,所以()優先,使得*被先行配置,使整個型態是指標(Pointer),所以這個型態是指標。
    This tpye is a 'poniter' that piont to an integer array with 10 elements.

    int *ptr[10]; // no.2

    中括號[]的優先權大於星號*的優先權,所以[]被先行配置,使這個形態成為陣列,而這個陣列有10的元素,每個元素都是指標指向char。
    And this type is an 'array' with 10 elements which is a pointer.

    。應用 - 不定長度字串陣列

    char *token_rpstr[] = {
    "BEGIN", "END", "READ", "WRITE", "ID", "INTEGER",
    "LPARN", "RPARN", "SEMICOLON", "COMMA", "ASSIGNOP",
    "PLUSOP", "MINUSOP", "SCANEOF", "COMMENT", "STRING",
    "FLOAT", "ERROR"
    };

    另外,書本上範例:

    #include <stdio.h>

    int main(void)

    {

    int zippo[4][2] = { {2,4}, {6,8}, {1,3}, {5, 7} };

    int (*pz)[2];

    pz = zippo;

    printf(" pz = %p, pz + 1 = %p\n",

    pz, pz + 1);

    printf("pz[0] = %p, pz[0] + 1 = %p\n",

    pz[0], pz[0] + 1);

    printf(" *pz = %p, *pz + 1 = %p\n",

    *pz, *pz + 1);

    printf("pz[0][0] = %d\n", pz[0][0]);

    printf(" *pz[0] = %d\n", *pz[0]);

    printf(" **pz = %d\n", **pz);

    printf(" pz[2][1] = %d\n", pz[2][1]);

    printf("*(*(pz+2) + 1) = %d\n", *(*(pz+2) + 1));


    system("pause");
    return 0;

    }

  • 相关阅读:
    learnyou 相关网站
    hdu 3038 How Many Answers Are Wrong
    hdu 3047 Zjnu Stadium 并查集高级应用
    poj 1703 Find them, Catch them
    poj 1182 食物链 (带关系的并查集)
    hdu 1233 还是畅通工程
    hdu 1325 Is It A Tree?
    hdu 1856 More is better
    hdu 1272 小希的迷宫
    POJ – 2524 Ubiquitous Religions
  • 原文地址:https://www.cnblogs.com/bittorrent/p/2744494.html
Copyright © 2011-2022 走看看