標籤:
指標也是變數,佔有記憶體空間,用來儲存記憶體位址。
指標也是一種資料類型,指標是一種資料類型,是指它所致記憶體空間的資料類型。
指標變數和它指向的記憶體塊是兩個不同的概念
*p操作記憶體
在指標聲明時,*號表示所聲明的變數為指標
在指標使用時,*號表示操作指標所指向的記憶體空間中的值
*p相當於通過地址(p變數的值)找到一塊記憶體;
然後操作記憶體 *p放在等號的左邊賦值(給記憶體賦值)
*p放在等號的右邊取值(從記憶體擷取值)
#include <iostream>using namespace std;#include <stdio.h>void change(int num){ num=666;}void changeA(int *num){ *num=666;}void printfSingleArrayInt(int *p,int n){ cout<<"/**********************************/"<<endl; cout <<p<< endl; cout<<sizeof(p)<<endl;//4 for(int i=0;i<n;i++){ cout<<*(p+i)<<endl; } cout<<"/**********************************/"<<endl;}void printfSingleArrayIntS(int a[10]){ cout<<"/*****************s*****************/"<<endl; cout<<sizeof(a)<<endl;//4 for(int i=0;i<10;i++){ cout<<*(a+i)<<endl; } cout<<"/**********************************/"<<endl;}int main(){ int a[10]={0}; for(int i=0;i<10;i++){ a[i]=i; } int *p; //指標的步長,根據所指記憶體空間類型來定。 cout<<sizeof(p)<<endl;//4 p=a; cout<<sizeof(p)<<endl;//4 cout<<sizeof(a)<<endl;//40 cout<<sizeof(a+1)<<endl;//4 cout<<sizeof(&a)<<endl;//4 cout<<sizeof(&a+1)<<endl;//4 printfSingleArrayInt(p,10); printfSingleArrayIntS(a); printf("%d %d\n",a,a+1); printf("%d %d\n",&a,&a+1); return 0;}int main01(){ int num=100; int *p=# cout <<&num<< endl;//列印num的地址 num=1;//直接修改num的值 cout <<num<< endl;//列印num的值 *p=100000;//間接修改num的值 //*p放在等號的左邊間接修改記憶體空間的值 /** *p 的意義:*就像一把鑰匙,根據一個指標變數的值,去修改門後門的記憶體空間 **/ cout <<num<< endl; change(num); cout <<num<< endl;/* 間接賦值成立的三個條件 a)2個變數(通常一個實參,一個形參) b)建立關係,實參取地址賦給形參指標 c)*p形參去間接修改實參的值*/ changeA(p); cout <<num<< endl; int a=*p;////*p放在等號的右邊從記憶體空間中拿值 cout <<a<< endl;/* { char *b=NULL; *b=‘j‘; }*/ return 0;}
cout<<sizeof(a)<<endl;//40 a所對應的地址所包含資料類型的長度
cout<<sizeof(a+1)<<endl;//4
cout<<sizeof(&a)<<endl;//4 &a是數組a的地址,佔四個位元組
cout<<sizeof(&a+1)<<endl;//4 &a+1是數組a+1的地址,佔四個位元組
a,a[0],&a這三個元素列印的地址是相同的。
a+i 表示的是以記憶體位址a移動了i個int的地址。
printf("%d %d\n",a,a+1);
printf("%d %d\n",&a,&a+1);
&a 與 &a+1 之間相差了幾個元素呢?
&a代表的是把數組看成一個整體取地址
&a + 1 則表示數組作為一個整體移動了一個元素(數組)。
間接賦值成立的三個條件
a)2個變數(通常一個實參,一個形參) b) 建立關係,實參取地址賦給形參指標 c) *p形參去間接修改實參的值
C++指標一