程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 簡略剖析C說話中指針數組與數組指針的差別

簡略剖析C說話中指針數組與數組指針的差別

編輯:關於C++

簡略剖析C說話中指針數組與數組指針的差別。本站提示廣大學習愛好者:(簡略剖析C說話中指針數組與數組指針的差別)文章只能為提供參考,不一定能成為您想要的結果。以下是簡略剖析C說話中指針數組與數組指針的差別正文


起首來分離看一下,指針數組的一個小例子:

#include <stdio.h> 
#include <string.h> 
 
int lookup_keyword(const char*key, const char* table[], const int size) 
{ 
  int ret = -1; 
 
  int i = 0; 
 
  for(i=0; i<size; i++) 
  { 
    if (strcmp(key, table[i]) == 0) 
    { 
      ret = i; 
      break; 
    } 
  } 
  return ret; 
} 
 
#define DIM(array) (sizeof(array)/sizeof(*array)) 
 
int main() 
{ 
  const char* keyword[] = { 
      "do", 
      "for", 
      "if", 
      "register", 
      "switch", 
      "while", 
      "case", 
      "static", 
  }; 
 
  printf("%d\n", lookup_keyword("static", keyword, DIM(keyword))); 
 
  return 0; 
} 

數組指針:

#include <stdio.h> 
 
int main() 
{ 
  int i; 
  int* pI = &i; //通俗類型 
 
  typedef int(AINT5)[5]; 
  AINT5* p1; 
  int array[5]; 
  p1 = &array; //數組指針1 
 
  int (*p2)[5] = &array; //數組指針2(不建議如許寫) 
 
  int (*p3)[4] = &array; // X 數組指針3(不建議如許寫) 
 
  return 0; 
} 

這兩個名字分歧固然所代表的意思也就分歧。我剛開端看到這就嚇到了,重要是中文太胸無點墨了,整如許的簡稱太專業了,把人都繞暈了。從英文說明或中文全稱看就比擬輕易懂得。

指針數組:array of pointers,即用於存儲指針的數組,也就是數組元素都是指針

數組指針:a pointer to an array,即指向數組的指針

還要留意的是他們用法的差別,上面舉例解釋。

int* a[4]     指針數組    

                 表現:數組a中的元素都為int型指針   

                 元素表現:*a[i]   *(a[i])是一樣的,由於[]優先級高於*

int (*a)[4]   數組指針    

                 表現:指向數組a的指針

                 元素表現:(*a)[i] 

留意:在現實運用中,關於指針數組,我們常常如許應用:

typedef int* pInt;
pInt a[4];

這跟下面指針數組界說所表達的意思是一樣的,只不外采用了類型變換。

代碼演示以下:

#include <iostream>
 
using namespace std;
 
int main()
{
int c[4]={1,2,3,4};
int *a[4]; //指針數組
int (*b)[4]; //數組指針
b=&c;
//將數組c中元素賦給數組a
for(int i=0;i<4;i++)
{
a[i]=&c[i];
}
//輸入看下成果
cout<<*a[1]<<endl; //輸入2就對
cout<<(*b)[2]<<endl; //輸入3就對
return 0;
}

留意:界說了數組指針,該指針指向這個數組的首地址,必需給指針指定一個地址,輕易犯的錯得就是,不給b地址,直接用(*b)[i]=c[i]給數組b中元素賦值,這時候數組指針不曉得指向哪裡,調試時能夠沒錯,但運轉時確定湧現成績,應用指針時要留意這個成績。但為何a就不消給他地址呢,a的元素是指針,現實上for輪回內曾經給數組a中元素指定地址了。但如果在for輪回內寫*a[i]=c[i],這異樣會出成績。總之一句話,界說了指針必定要曉得指針指向哪裡,否則要喜劇。

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