指標的加減操作和比較
阿新 • • 發佈:2019-01-25
指標加減的例題程式碼:
#include<stdio.h>
int main(void)
{
int a[5] = {1,2,3,4,5} ;
int *ptr = (int *)(&a+1) ;
printf("%d\n",*(a+1)) ;
printf("%d\n",*(ptr-1)) ;
return 0 ;
}
解析:
這裡主要是關於指標加減操作的理解。對指標進行加1操作,得到的是下一個元素的地址,而不是原有地址值直接加1,所以,一個型別為t的指標的移動,以sizeof(t)為移動單位。
(1)程式碼第5行,宣告一個一維陣列,並且a有5個元素。#include<iostream> using namespace std ; int main(void) { char str1[] = "abc" ; char str2[] = "abc" ; const char str3[] = "abc" ; const char str4[] = "abc" ; const char* str5 = "abc" ; const char* str6 = "abc" ; char * str7 = "abc" ; char * str8 = "abc" ; cout<<(str1 == str2)<<endl ; cout<<(str3 == str4)<<endl ; cout<<(str5 == str6)<<endl ; cout<<(str6 == str7)<<endl ; cout<<(str7 == str8)<<endl ; return 0 ; }
陣列str1,str2,str3和str4都是在棧中分配的,記憶體中的內容都為“abc”加一個“\0”,但是它們的位置是不同的。因此程式碼第15行和第16行的輸出都是0 ; 指標str5,str6,str7和str8也是在棧中分配,它們都指向“abc”字串,注意“abc”存放在資料區,所以str5,str6,str7和str8其實指向同一塊資料區的記憶體。因此第17,18和19行的輸出是1。