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;

    }

  • 相关阅读:
    7-4 找出不是两个数组共有的元素(20 分)
    7-2 删除重复字符(20 分)
    7-1 兔子繁衍问题(15 分)
    1018 Public Bike Management (30分) (迪杰斯特拉+dfs)
    PAT 1014 Waiting in Line (30分) 一个简单的思路
    1010 Radix (25分)
    试题编号: 201809-4 试题名称: 再卖菜 记忆化搜索
    试题编号: 201903-3 试题名称: 损坏的RAID5
    CCF 试题编号: 201909-4 试题名称: 推荐系统
    洛谷P3809 后缀数组模板
  • 原文地址:https://www.cnblogs.com/bittorrent/p/2744494.html
Copyright © 2011-2022 走看看