91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言數組中的a與&a有什么不同

發布時間:2021-08-24 18:13:32 來源:億速云 閱讀:133 作者:chen 欄目:互聯網科技

本篇內容介紹了“C語言數組中的a與&a有什么不同”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

首先,看一段代碼:

#include <stdio.h>

int main(void)
{
 int a[5] = {0,1,2,3,4};
 
 printf("a = %d , &a = %d \n", a, &a);
 
 return 0;

該代碼運行結果為:

C語言數組中的a與&a有什么不同

可見,對于一個數組:

int a[5] = {0,1,2,3,4};

a與&a的值是相同的。為什么呢?

a是數組名,是一個數據區的常量,對其取地址(&a)就可以得到數組存儲區域的地址,同樣,a本身也代表了數組存儲區的首地址。所以,a與&a的值是一樣的。但是,雖然a與&a指向同一個地址,但是他們的含義是不同的。下面我們修改一下上面的代碼看看"a+1"與"&a+1"是否還相等?修改后的代碼運行結果為:

C語言數組中的a與&a有什么不同

可見,a+1的值比a的值大4,即sizeof(a[0]);&a+1比&a的值大20,即sizeof(a)。由此,可得出結論:a+1指向的地址相對與a指向的地址向后偏移了sizeof(a[0])個字節,&a+1指向的地址相對與&a指向的地址向后偏移了sizeof(a)個字節,其描述圖如下:

C語言數組中的a與&a有什么不同

看了這張圖,想必大家已經對a與&a有了一個清晰的認識了吧。下面分析一段代碼:

#include <stdio.h>

int main(void)
{
 int a[5] = {0,1,2,3,4};
 int *ptr = (int*)(&a+1);
 
 printf("*(a+1) = %d, *(ptr-1) = %d\n",*(a+1), *(ptr-1));
 
 return 0;
}

運行結果是什么呢?

運行結果為:

*(a+1) = 1, *(ptr-1) = 4

*(a+1) = 1,是因為a+1代表數組第二個元素的地址,即&a[1],*(a+1)為取該地址上的值,即為1;*(ptr-1)=4,是因為ptr指向的是整個數組內存區域之后的內存,即數組最后一個元素之后的地址,ptr-1就是指向數組的最后一個元素,*(ptr-1)為取該地址上的值,即為4。

“C語言數組中的a與&a有什么不同”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辽阳县| 习水县| 蛟河市| 洛扎县| 漾濞| 清水县| 东辽县| 黄骅市| 新疆| 洛扎县| 洱源县| 临清市| 湖南省| 屯门区| 许昌县| 天津市| 东海县| 宜宾县| 泽普县| 印江| 虎林市| 来凤县| 榕江县| 台湾省| 唐山市| 射阳县| 右玉县| 广南县| 盐源县| 周口市| 桐乡市| 神池县| 金塔县| 饶平县| 阳高县| 吴忠市| 潜江市| 克拉玛依市| 临朐县| 永春县| 锡林郭勒盟|