一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

【重要】數(shù)組與指針不等價(jià)

 嵌入式大雜燴 2021-08-20

1

前言

數(shù)組與指針是不等價(jià)的,如:

  • 數(shù)組名不可以改變,而指向數(shù)組的指針是可以改變的。

  • 字符串指針指向的字符串中的字符是不能改變的,而字符數(shù)組中的字符是可以改變的。

  • 求數(shù)組長(zhǎng)度時(shí),借用數(shù)組名可求得數(shù)組長(zhǎng)度,而借用指針卻得不到數(shù)組長(zhǎng)度。

2

區(qū)別一

數(shù)組名的指向不可以改變,而指向數(shù)組的指針是可以改變的。

請(qǐng)看如下代碼:

#include <stdio.h>

int main(void)
{
 int a[5] = {0, 1, 2, 3, 4}, *p = a;
 char i;
 
 // 數(shù)組遍歷方式一
 for ( i = 0; i < 5; i++ )
 {
   printf("a[%d] = %d\n", i, *p++);
 }
 
 // 數(shù)組遍歷方式二
 for ( i = 0; i < 5; i++ )
 {
   printf("a[%d] = %d\n", i, *a++);
 }
 
 return 0;
}

數(shù)組遍歷方式一:使用指針遍歷數(shù)組元素,*p++等價(jià)于*(p++),即指針指向的地址每次后移一個(gè)單位,然后再取地址上的值。這里的一個(gè)單位是sizeof(int)個(gè)字節(jié),至于為什么是sizeof(int)個(gè)字節(jié)可以查閱我的總結(jié)C語言指針變量的運(yùn)算。

數(shù)組遍歷方式二:使用數(shù)組名自增遍歷數(shù)組元素,編譯出錯(cuò),錯(cuò)誤如下:

error: value required as increment operand

因?yàn)閿?shù)組名的指向是不可以改變的,使用自增運(yùn)算符自增就會(huì)改變其指向,這是不對(duì)的,數(shù)組名只能指向數(shù)組的開頭。但是可以改為如下遍歷方式:

for ( i = 0; i < 5; i++ )
 {
   printf("a[%d] = %d\n", i, *(a+i));
 }

這可以正確遍歷數(shù)組元素。因?yàn)?(a+i)與a[i]是等價(jià)的。

3

區(qū)別二

字符串指針指向的字符串中的字符是不能改變的,而字符數(shù)組中的字符是可以改變的。

請(qǐng)看如下代碼:

//字符串定義方式一
char str[] = "happy";

//字符串定義方式二
char *str = "happy";

字符串定義方式一:字符串中的字符是可以改變的。如可以使用類似str[3]='q'這樣的語句來改變其中的字符。原因就是:這種方式定義的字符串保存在全局?jǐn)?shù)據(jù)區(qū)或棧區(qū),是可讀寫的。

字符串定義方式二:字符串中的字符是不可以改變的。原因就是:這種方式定義的字符串保存在常量區(qū),是不可修改的。

具體可查閱:char *str與char str[]的區(qū)別

PS:關(guān)于C內(nèi)存內(nèi)存的總結(jié)可查閱我的總結(jié):通俗易懂的C語言內(nèi)存總結(jié)

4

區(qū)別三


求數(shù)組長(zhǎng)度時(shí),借用數(shù)組名可求得數(shù)組長(zhǎng)度,而借用指針卻得不到數(shù)組長(zhǎng)度。

請(qǐng)看如下代碼:

#include <stdio.h>

int main(void)
{
 int a[] = {0, 1, 2, 3, 4}, *p = a;
 char len = 0;
 
 // 求數(shù)組長(zhǎng)度方式一
 printf("方式一:len=%d\n",sizeof(a)/sizeof(int));
 
 // 求數(shù)組長(zhǎng)度方式二
 printf("方式二:len=%d\n",sizeof(p)/sizeof(int));
 
 return 0;
}

運(yùn)行結(jié)果

方式一:len=5
方式二:len=1

求數(shù)組長(zhǎng)度方式一:借用數(shù)組名來求數(shù)組長(zhǎng)度,可求得數(shù)組有5個(gè)元素,正確。

求數(shù)組長(zhǎng)度方式二:借用指針求數(shù)組長(zhǎng)度,求得長(zhǎng)度為1,錯(cuò)誤。原因是:

p只是一個(gè)指向int類型的指針,編譯器不知道其指向的是一個(gè)整數(shù)還是指向一個(gè)數(shù)組。sizeof(p)求得的是p這個(gè)指針變量本身所占用的字節(jié)數(shù),而不是整個(gè)數(shù)組占用的字節(jié)數(shù)。

以上就是指針與其指向的數(shù)組的三個(gè)典型的區(qū)別:(1)遍歷數(shù)組時(shí)需要注意;(2)修改字符串中的字符時(shí)需要注意;(3)求數(shù)組長(zhǎng)度時(shí)需要注意。

推 薦 閱 讀

【常見】getchar()、getche()、getch()的區(qū)別?
【知識(shí)點(diǎn)】#define與typedef的區(qū)別?
【常用】static有幾種用法?

【常用】extern怎么用?

【易錯(cuò)】char *str與char str[]的區(qū)別?

【提高效率】你應(yīng)該用復(fù)合賦值語句?

【知識(shí)點(diǎn)】來看一看volatile關(guān)鍵字

【知識(shí)點(diǎn)】C語言變量默認(rèn)的初值是?

【易錯(cuò)】C語言內(nèi)存對(duì)齊問題

【實(shí)用】關(guān)于數(shù)組與指針的總結(jié)

【編程練習(xí)】進(jìn)制轉(zhuǎn)換問題

【每日一句】

塑造自己的過程很疼,但最終你能收獲一個(gè)更好的自己。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    中文人妻精品一区二区三区四区 | 亚洲一区二区久久观看| 黄色国产自拍在线观看| 在线免费国产一区二区| 日韩精品一区二区三区射精| 久久精品伊人一区二区| 欧美黑人精品一区二区在线| 欧美日韩久久精品一区二区| 欧美一级黄片欧美精品| 又大又长又粗又黄国产| 午夜小视频成人免费看| 亚洲黑人精品一区二区欧美| 欧美人妻少妇精品久久性色| 无套内射美女视频免费在线观看 | 色婷婷视频免费在线观看| 日韩欧美综合在线播放| 国产色偷丝袜麻豆亚洲| 高清一区二区三区大伊香蕉| 精品国产亚洲av成人一区| 亚洲av日韩av高潮无打码| 亚洲一区二区三区熟女少妇| 日韩性生活视频免费在线观看| 人妻熟女中文字幕在线| 天堂热东京热男人天堂| 欧美黑人暴力猛交精品| 欧美精品久久男人的天堂| 97精品人妻一区二区三区麻豆| 精品国产亚洲区久久露脸| 亚洲综合香蕉在线视频| 久久热九九这里只有精品| 欧美一区二区不卡专区| 久久国产人妻一区二区免费| 亚洲欧美日韩在线中文字幕| 久一视频这里只有精品| 国产盗摄精品一区二区视频| 亚洲精品中文字幕欧美| 91人妻人人做人碰人人九色| 丝袜视频日本成人午夜视频| 国产精品成人又粗又长又爽| 久久精品国产亚洲av久按摩| 亚洲精品成人午夜久久|