程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話中6組指針和自增運算符聯合方法的運算次序成績

C說話中6組指針和自增運算符聯合方法的運算次序成績

編輯:關於C++

C說話中6組指針和自增運算符聯合方法的運算次序成績。本站提示廣大學習愛好者:(C說話中6組指針和自增運算符聯合方法的運算次序成績)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中6組指針和自增運算符聯合方法的運算次序成績正文


在C說話中,當指針運算符和++或許–聯合時很輕易分不清運算次序,在這裡總結一下,上面一共剖析6中組合: * p++,(* p)++,* (p++),++* p,++( * p), * (++p)。

先看段代碼和輸入:

#include<stdio.h>
int main()
{
  int a[3]={1,3,5};
  int *p=a;
  printf("----------------1----------------\n");
  printf("%d\n",*p++);
  printf("%d\n",*p);
  int i;
  for(i=0;i<3;i++)
    printf("%d ",a[i]);
  printf("\n");
  printf("----------------2----------------\n");
  p=a;//reset data
  printf("%d\n",(*p)++);
  printf("%d\n",*p);
  for(i=0;i<3;i++)
    printf("%d ",a[i]);
  printf("\n");
  printf("----------------3----------------\n");
  a[0]=1;//reset data
  p=a;
  printf("%d\n",*(p++));
  printf("%d\n",*p);
  for(i=0;i<3;i++)
    printf("%d ",a[i]);
  printf("\n");
  printf("----------------4----------------\n");
  p=a;
  printf("%d\n",++*p);
  printf("%d\n",*p);
  for(i=0;i<3;i++)
    printf("%d ",a[i]);
  printf("\n");
  printf("----------------5----------------\n");
  p=a;
  a[0]=1;
  printf("%d\n",++(*p));
  printf("%d\n",*p);
  for(i=0;i<3;i++)
    printf("%d ",a[i]);
  printf("\n");
  printf("----------------6----------------\n");
  p=a;
  a[0]=1;
  printf("%d\n",*(++p));
  printf("%d\n",*p);
  for(i=0;i<3;i++)
    printf("%d ",a[i]);
  printf("\n");
  return 0;
}

輸入成果是如許的:

第一組:*p++,它的運算次序是先前往 *p的值,然後p再++。
第二組:(*p)++,他的運算次序是先前往 *p的值,然後 *p的值再++,這一點從運算後的數組a的值可以看出來。
第三組:*(p++),運算次序是先前往 *p的值,然後p再++,也就是說它和 *p++的運算次序一樣。

這三組都是先前往 *p的值,差別就在於究竟是p++照樣 *p的值++。

第四組:++*p,先將 *p的值++,然後再前往 *p的值。
第五組:++(*p),先將 *p的值++,然後再前往 *p的值,所以它和++ *p是一樣的。
第六組: * (++p),先將p的值++,然後再前往 * p的值,和 *++p是等價的。

這三組的特色是最初都是前往 *p的值,分歧點在因而 *p先++照樣p++。

以上就是本文的全體內容,願望年夜家可以愛好。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved