目錄
- 一.前言
- 二.指標和陣列區別
- 1.通過 sizeof 獲取大小
- a.計算陣列大小
- b.計算指標大小
- 2.指標和陣列賦值方式不同
- a.指標賦值
- b.陣列賦值
- 3.指標是指標變數,陣列是指標常量
- 1.通過 sizeof 獲取大小
- 三.猜你喜歡
零基礎 C/C++ 學習路線推薦 : C/C++ 學習目錄 >> C 語言基礎入門
一.前言
在 C 語言教程的 使用指標遍歷陣列 文章中我們使用通過陣列名通過偏移和指標偏移都可以遍歷陣列,那么指標和陣列到底有什么區別??
由于陣列中的資料在記憶體中都是連續存放的,陣列名默認就是陣列的首地址,也是一個特殊的指標;

二.指標和陣列區別
1.通過 sizeof 獲取大小
不管是陣列還是指標變數,計算大小的時候都可以通過 sizeof 函式,注意兩者使用的區別:
a.計算陣列大小
陣列所占存盤空間的記憶體:
sizeof(陣列名);陣列的大小:
sizeof(陣列名)/sizeof(資料型別)
/************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 指標和陣列區別
//@Time:2021/06/18 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/************************************************************************/
int array[] = {1,2,3,4,5};int len1 = sizeof(array)/sizeof(array[0]); // len1 = int array[] = {1,2,3,4,5};
int len1 = sizeof(array)/sizeof(array[0]); // len1 = 5 正確計算結果
int len2 = sizeof(array); // len2 = 20 錯誤計算結果
b.計算指標大小
在 32 位平臺下,無論指標的型別是什么,sizeof(指標名)都是 4 ,在 64 位平臺下,無論指標的型別是什么,sizeof(指標名)都是 8 ,;
/************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 指標和陣列區別
//@Time:2021/06/18 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/************************************************************************/
int array[] = {1,2,3,4,5};
int *p1 = array; // 指標指向該陣列的首地址
// x86下編譯 len1 = 4
// x64下編譯 len1 = 8
int len1 = sizeof(p1);
int value = https://www.cnblogs.com/shuopython/p/20;
int* p2 = &value;
// x86下編譯 len2 = 4
// x64下編譯 len2 = 8
int len2 = sizeof(p2);
由此可見,sizeof 函式計算指標大小的時候,與資料變數型別無關, x86 平臺下指標大小始終為 4,x64 平臺下指標大小始終為 8 ;
2.指標和陣列賦值方式不同
a.指標賦值
指標很靈活,它可以指向任意型別的資料,指標的型別說明了它所指向地址空間的記憶體,
b.陣列賦值
陣列在記憶體中是連續存放的,開辟一塊連續的記憶體空間,陣列可以根據陣列的下進行訪問,多維陣列實際上由多個一維陣列夠成,陣列的賦值這里不再重復講解,可以直接參考:陣列定義和使用
3.指標是指標變數,陣列是指標常量
- 常量:常量的值始終是固定的,不能被修改;
- 變數:變數的值可以任意修改;
那么指標和陣列區別在哪呢?既然說陣列也是一種比較特殊的指標,那么我們回憶一下上一篇文章:使用指標遍歷陣列
/************************************************************************/
//@Author:猿說編程
//@Blog(個人博客地址): www.codersrc.com
//@File:C語言教程 - C語言 指標和陣列區別
//@Time:2021/06/18 08:00
//@Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累!
/************************************************************************/
#include<stdlib.h>
#include<stdio.h>
void main()
{
int arr[5] = { 10,20,30,40,50 };
int* p = arr; //定義一個空指標
int len = sizeof(arr) / sizeof(arr[0]);//計算陣列長度
//寫法一:正確寫法 - 使用指標變數陣列
for (int i = 0;i<len;i++)
{
printf("下標:%d 值: %d\n", i,*p);
p++; //地址偏移+1,等價偏移到下一個元素地址
}
//寫法二:錯誤寫法 - 使用陣列名偏移
/*
for (int i = 0;i<len;i++)
{
printf("下標:%d 值: %d\n", i,*arr);
arr++; //錯誤寫法
}
*/
system("pause");
}
- 寫法一是正確的,常規操作;
- 寫法二是錯誤的,陣列名默認指向陣列的首地址,是不能背修改的;
- 所以說陣列是指標常量,不能被修改;指標是變數可以被隨意修改;
三.猜你喜歡
- 安裝 Visual Studio
- 安裝 Visual Studio 插件 Visual Assist
- Visual Studio 2008 卸載
- Visual Studio 2003/2015 卸載
- C 語言邏輯運算子
- C 語言三目運算子
- C 語言逗號運算式
- C 語言 sizeof 和 strlen 函式區別
- C 語言 strcpy 和 strcpy_s 函式區別
- C 語言 memcpy 和 memcpy_s 區別
- C 語言 陣列定義和使用
- C 語言 陣列遍歷
- C 語言 陣列下標越界
- C 語言 陣列記憶體溢位
- C 語言 陣列下標越界和記憶體溢位區別
- C 語言 二維陣列定義和使用
- C 語言 二維陣列行數和列數計算
- C 語言 指標宣告和定義
- C 語言 指標 p++ / p–
- C 語言 p++/§++/_(p++)/_p++
- C 語言 使用指標遍歷陣列
- C 語言 指標和陣列區別
未經允許不得轉載:猿說編程 ? C 語言 指標和陣列區別
本文由博客 - 猿說編程 猿說編程 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/295938.html
標籤:C
上一篇:C語言----陣列(基礎篇八)
