程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 數組nice to see you again

數組nice to see you again

編輯:關於C
#include 
#include 

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) 
{
	int a[5]={1,2,3,4,5};
	int *ptr1=(int *)(&a+1);
	int *ptr2=(int *)((int)a+1);
	printf("%d,%d",ptr1[-1],*ptr2);
	return 0;
}

上測試程序來自《C語言深度解析》中的一個習題:

分析如下:

先打印出結果:

\

格式符變一下;;;;

	printf("%d,%p",ptr1[-1],*ptr2);

\


ptr1[-1]結果為5,很顯然,這個表達式看上去乖乖的,但是編譯器並未報錯 運行正常,,個人認為這個結果完全正確!

ptr1指針指向數組最後一個元素接下來的那個地址,ptr1[-1]這磊喎?/kf/ware/vc/" target="_blank" class="keylink">vcHRyMc/gtbHT2sr91+nD+2G1xNf308OjrC0xvs3N+brzzcvSu7j2yv3X6dSqy9i089ChtcTE2rTmtaXUqqOs0rK+zcrHYVs0Xcv51Nq1xLXY1re1pdSqPC9wPgo8cD7K5LP2NcrH1f3It7XEo6E8L3A+CjxwPjxicj4KPC9wPgo8cD4qcHRyMiAgICA9ICAgMj8/P7K7o6GjoaOho6E8L3A+CjxwPqOoaW50o6lhJiM0Mzsx0+thJiM0MzsxysfN6sirsrvNrLXEwb249rarzveho8Tjx/i31sP3sNfBy8S+09Cho6GjoaOhozwvcD4KPHA+PHByZSBjbGFzcz0="brush:java;">#include #include /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main(int argc, char *argv[]) { int a[5]={1,2,3,4,5}; int *ptr1=(int *)(&a+1); int *ptr2=(int *)((int)a+1); printf("%p\n",(int *)(int)a+1);//0022ff28 printf("%d,%p",ptr1[-1],*ptr2); return 0; }
*ptr2的值就是內存單元0022ff28內存儲存的內容!鬼知道編譯器是怎麼想的

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