*p[10]和(*P)[10]有区别吗?

qq1041256623 2014-02-26 07:58:41
*p[10]和(*P)[10]有区别吗?
...全文
845 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
电脑旁的孤独 2014-02-27
  • 打赏
  • 举报
回复
从楼上的表中可看出 ()里的东西最先结合 [ ]的优先级高于*的优先级 若类型为char,char *p[10]可以理解为有一个数组,数组的10个元素都指向char类型的数据 若类型为char,char (*p)[10]先结合*p,表示指向十个一维数组的指针 例如 char a[3][10]; char (*p)[10]=a; 可用来访问数组的每个元素。 p[2][1]表示第三行第一列的元素。
赵4老师 2014-02-27
  • 打赏
  • 举报
回复
//C++ Operators
//  Operators specify an evaluation to be performed on one of the following:
//    One operand (unary operator)
//    Two operands (binary operator)
//    Three operands (ternary operator)
//  The C++ language includes all C operators and adds several new operators.
//  Table 1.1 lists the operators available in Microsoft C++.
//  Operators follow a strict precedence which defines the evaluation order of
//expressions containing these operators.  Operators associate with either the
//expression on their left or the expression on their right;    this is called
//“associativity.” Operators in the same group have equal precedence and are
//evaluated left to right in an expression unless explicitly forced by a pair of
//parentheses, ( ).
//  Table 1.1 shows the precedence and associativity of C++ operators
//  (from highest to lowest precedence).
//
//Table 1.1   C++ Operator Precedence and Associativity
// The highest precedence level is at the top of the table.
//+------------------+-----------------------------------------+---------------+
//| Operator         | Name or Meaning                         | Associativity |
//+------------------+-----------------------------------------+---------------+
//| ::               | Scope resolution                        | None          |
//| ::               | Global                                  | None          |
//| [ ]              | Array subscript                         | Left to right |
//| ( )              | Function call                           | Left to right |
//| ( )              | Conversion                              | None          |
//| .                | Member selection (object)               | Left to right |
//| ->               | Member selection (pointer)              | Left to right |
//| ++               | Postfix increment                       | None          |
//| --               | Postfix decrement                       | None          |
//| new              | Allocate object                         | None          |
//| delete           | Deallocate object                       | None          |
//| delete[ ]        | Deallocate object                       | None          |
//| ++               | Prefix increment                        | None          |
//| --               | Prefix decrement                        | None          |
//| *                | Dereference                             | None          |
//| &                | Address-of                              | None          |
//| +                | Unary plus                              | None          |
//| -                | Arithmetic negation (unary)             | None          |
//| !                | Logical NOT                             | None          |
//| ~                | Bitwise complement                      | None          |
//| sizeof           | Size of object                          | None          |
//| sizeof ( )       | Size of type                            | None          |
//| typeid( )        | type name                               | None          |
//| (type)           | Type cast (conversion)                  | Right to left |
//| const_cast       | Type cast (conversion)                  | None          |
//| dynamic_cast     | Type cast (conversion)                  | None          |
//| reinterpret_cast | Type cast (conversion)                  | None          |
//| static_cast      | Type cast (conversion)                  | None          |
//| .*               | Apply pointer to class member (objects) | Left to right |
//| ->*              | Dereference pointer to class member     | Left to right |
//| *                | Multiplication                          | Left to right |
//| /                | Division                                | Left to right |
//| %                | Remainder (modulus)                     | Left to right |
//| +                | Addition                                | Left to right |
//| -                | Subtraction                             | Left to right |
//| <<               | Left shift                              | Left to right |
//| >>               | Right shift                             | Left to right |
//| <                | Less than                               | Left to right |
//| >                | Greater than                            | Left to right |
//| <=               | Less than or equal to                   | Left to right |
//| >=               | Greater than or equal to                | Left to right |
//| ==               | Equality                                | Left to right |
//| !=               | Inequality                              | Left to right |
//| &                | Bitwise AND                             | Left to right |
//| ^                | Bitwise exclusive OR                    | Left to right |
//| |                | Bitwise OR                              | Left to right |
//| &&               | Logical AND                             | Left to right |
//| ||               | Logical OR                              | Left to right |
//| e1?e2:e3         | Conditional                             | Right to left |
//| =                | Assignment                              | Right to left |
//| *=               | Multiplication assignment               | Right to left |
//| /=               | Division assignment                     | Right to left |
//| %=               | Modulus assignment                      | Right to left |
//| +=               | Addition assignment                     | Right to left |
//| -=               | Subtraction assignment                  | Right to left |
//| <<=              | Left-shift assignment                   | Right to left |
//| >>=              | Right-shift assignment                  | Right to left |
//| &=               | Bitwise AND assignment                  | Right to left |
//| |=               | Bitwise inclusive OR assignment         | Right to left |
//| ^=               | Bitwise exclusive OR assignment         | Right to left |
//| ,                | Comma                                   | Left to right |
//+------------------+-----------------------------------------+---------------+
richyhuang 2014-02-27
  • 打赏
  • 举报
回复
楼主这个是声明啊还是使用啊
Pump天天学习 2014-02-26
  • 打赏
  • 举报
回复 1
int *p[10] p首先是个数组,因为它先和[10]结合 其次,这个数组里面存的内容是int*,也就是数组有10个元素,每个元素都是一个指针, int (*P)[10] p先和*结合,意味着p是一个指针,他指向int [10],即p是一个指向一个数组的指针
ooolinux 2014-02-26
  • 打赏
  • 举报
回复
引用 楼主 qq1041256623 的回复:
*p[10]和(*P)[10]有区别吗?
比如int *p[10],也可以这么写 int* p[10],p是一个数组,数组元素p[i]的类型是int*,就是指向int的指针。 比如a[3][10],它包括a[0][10],a[1][10],a[2][10],a[0],a[1],a[2]可以表示成a[i]==*(a+i),所以(*P)[10],p可以等于a+i,p是指向大小为10的数组,p的增一减一是以一行为单位的(比如3行10列)。
mujiok2003 2014-02-26
  • 打赏
  • 举报
回复
看看预算符: * []的优先级和结合性。
*p[10]

*(p[10]);
是一样的。
qq1041256623 2014-02-26
  • 打赏
  • 举报
回复
引用 2 楼 misakamm 的回复:
你可以把(*P)[10]看成P[0][10] 而*p[10]只能是*(p[10])
*p[]和p[][]差不多意思吧
  • 打赏
  • 举报
回复
你可以把(*P)[10]看成P[0][10] 而*p[10]只能是*(p[10])
  • 打赏
  • 举报
回复
完全不一样...

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧