【3-1-27】指針左值指針與整數指針空指針以及指向爲空的指針

總結:A:左值就是能放在等號左邊能賦值的值,B:指針變量是左值,是因爲它是變量,而不是因爲它似指針,C:通過強制轉換的方式,把地址轉換成指針,D:void 指針和空指針,空指針就判定一下是否指向一地址


1:指針的概念和拓展


void main200()
{
int a = 5;//能放在賦值號左邊賦值的值叫左值
int *p = &a;//p是一左值,因爲p是一指針變量,重要的是它是變量,而不是指針,
int *const px;//px是一指針常量,不可以被賦值
*p = 3;//指針變量,以及指針指向的數據,除非是常量,能被賦值都是左值
}

2:指針與整數,指針的地址和整數有什麼關係呢?


//如何通過scanf對這個指針初始化,並且對這個指針改變這個數據呢?
void main201()
{
int a = 10;
int b = 20;
printf("%p,%p\n",&a,&b);
//我們傳入了b的地址,改變了它的值,它是一個整數,那怎麼通過整數的方式對它實行初始化呢?
int *p;
int x;//p是一指針,x僅僅是一地址所代表的整數,
scanf("%d", &x);//輸入一個16進制的整數
p = (int *)x;//對p進行賦值,要強制轉換,將地址轉換爲指針,需要類型的轉換,直接輸入一個整數,把這個整數賦值給一個指針,然後通過一個指針改變一個變量,
//scanf("\n%p",&p);//用鍵盤輸入初始化指針變量
*p = 3;
printf("\na=%d,b=%d\n",a,b);
//那怎麼通過整數的方式對它實行初始化呢?下面

system("pause");
}

3:void指針與空指針


//void 類型的指針可以傳遞地址比如下面的
void *p1 = p2;
p1 = p3;
//void 類型的指針,由於指向不明確,大小不確定,所以無法取出內容,
printf("%d", *p1); 
//轉換就可以了
printf("%d", *((int *)p1));//空指針加上類型在取出內容
要把它用於某種類型的指針,需要強制轉換


void main203()
{
//void 不指向任何一個明確類型,只有一個地址,僅僅知道你從哪裏開始,不知道從哪裏結束呢?這個時候就沒有辦法取出裏面的內容
//用空指針可以接收任何指針類型的地址,void類型指針主要起到一個地址傳遞的作用,
int a = 10;
double b = 20.8;
int *p2 = &a;
double *p3 = &b;
void *p1 = p2;
p1 = p3;
printf("%d",*p1);//錯誤。因爲//void 不指向任何一個明確類型,只有一個地址,僅僅知道你從哪裏開始,不知道從哪裏結束呢?這個時候就沒有辦法取出裏面的內容

system("pause");
}

分配內存 malloc
malloc();大家想想它的返回值是什麼呢?它的返回值是一空指針,爲什麼返回值是一空指針?
因爲它在這裏就起到一傳遞地址的作用,我們可以把它轉換成任何類型的指針,

傳遞地址 malloc()

4:空指針

//一個指針爲空意味這什麼?
判斷指針是否指向一個地址,爲空就不指向任何地址
void main204()
{
int *p = NULL;//沒有初始化
int num = 20;
p = #//有對象了
if (p==NULL)
{
printf("指針沒有初始化,是單身,可以追求");
}
system("pause");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章