[轉]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;

}

转载于:https://www.cnblogs.com/bittorrent/archive/2012/10/29/2744494.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值