程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 學點C語言(21):數據類型 - 數組與指針

學點C語言(21):數據類型 - 數組與指針

編輯:關於C語言

1. 獲取數組的地址無須 &,因為數組名本身就是個地址

#include <stdio.h>

int main(void)
{
  char c = 'A';
  char cs[] = "ABC";

  printf("%c,%s\n",c,cs);      /* 獲取字符及字符數組的內容 */
   printf("%p,%p,%p\n",&c,cs,&cs); /* 獲取字符及字符數組的地址,cs與&cs沒有區別*/

  getchar();
  return 0;
}

2. 數組元素的地址是連續的:

#include <stdio.h>
int main(void)
{
char cs[] = "ABC";
printf("%p\n%p\n%p\n%p\n", cs, &cs[0], &cs[1], &cs[2]);
getchar();
return 0;
}

3. 數組名所代表的地址就是第一個元素的地址:

#include <stdio.h>

int main(void)
{
  char str[] = "ABC";
  char *p1 = str;
  char *p2 = &str[0];

  printf("%p,%p\n",p1,p2);

  getchar();
  return 0;
}

4. 通過指針訪問數組元素:

#include <stdio.h>
int main(void)
{
char str[] = "ABC";
char *p = str;
printf("%c\n", *p);
printf("%c\n", *p+1);
printf("%c\n", *p+2);
printf("\n");
printf("%c\n", *p);
printf("%c\n", *++p);
printf("%c\n", *++p);
getchar();
return 0;
}

5. 通過指針遍歷數組:

#include <stdio.h>

int main(void)
{
  char str[] = "123456789";
  char *p = str;

  int i;
  for (i = 0; i < sizeof str/sizeof str[0]; i++) {
    printf("%c\n",*p);
    p++;
  }

  getchar();
  return 0;
}

#include <stdio.h>

int main(void)
{
  char str[] = "123456789";
  char *p = str;

  while (*p != '\0') {
    printf("%c\n",*p);
    p++;
  }

  getchar();
  return 0;
}

#include <stdio.h>
#include <string.h>

int main(void)
{
  char str[] = "123456789";
  char *p = str;

  int i;
  for (i = 0; i < strlen(str); i++) {
    printf("%c\n",*(p+i));
  }

  getchar();
  return 0;
}

#include <stdio.h>

int main(void)
{
  int nums[] = {111,222,333,444};
  int *p = nums;

  int i;
  for (i = 0; i < sizeof nums / sizeof nums[0]; i++) {
    printf("%d\n",*p++);
  }

  getchar();
  return 0;
}

6. 注意: 指針+1 是根據元素大小移動一個位置

#include <stdio.h>

int main(void)
{
  int nums[] = {111,222,333,444};
  int *p = nums;

  int i;
  printf("%d\n",*p);
  printf("%d\n",*(p+1));

  printf("%d\n",*p+1); /* 不是這樣; 這是代表取值後再 + 1 */

  getchar();
  return 0;
}

7. 上面的指針其實都是數組元素的指針,如何聲明真正的數組指針呢?

#include <stdio.h>

int main(void)
{
  int nums[4] = {111,222,333,444};
  int (*p)[4] = &nums;   /* 注意其中的小括號 */

  printf("%d\n",(*p)[1]); /* 用起來並不方便  */
  printf("%d\n",(*p)[2]);

  getchar();
  return 0;
}

返回“學點C語言 - 目錄”

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