C++指標一

來源:互聯網
上載者:User

標籤:

指標也是變數,佔有記憶體空間,用來儲存記憶體位址。

指標也是一種資料類型,指標是一種資料類型,是指它所致記憶體空間的資料類型。

指標變數和它指向的記憶體塊是兩個不同的概念

  *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=&num;    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++指標一

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.