您好,登錄后才能下訂單哦!
int *x =&10;//不能對10取地址 因為他不在 堆棧區 //堆棧常量區的都b可以對變量取地址
10就是一個字面量 不能取地址
1:指針是一種數據類型
1)指針也是一種變量,占有內存空間,用來保持內存地址,在一般情況下所有指針、
都是4個字節;
2)*p操作內存
再指針聲明時,*號表示所聲明的變量為指針,
在指針使用時,*號表示操作指針所指向的內存空間的值,
*p相當于通過地址{p變量的值}找到一塊內存,然后操作內存
*p放在等號左邊賦值(給內存賦值)
*p放在等號的右邊取值(從內存獲取值)
3)指針變量和它指向的內存塊是兩個不同的概念;
char s='a'; char *p=&s; *p='b';//此操作對不會改變指針變量的值,但是會改變所指向地址的值
保證指向的內存是可修改的
char*p="abcdeff"; //c++編譯器會做兩個操作先給字符串分內存再給 p 分配4個字節內存
然后把a的地址賦值給 *p 也就是字符串的首地址
char *p=NULL;
strcpy([,"abcde"); //不可以向空內存寫數據
4)怎么理解(多級)指針做函數參數
a.站在c/c++編譯器的角度,如果是指針的形參 編譯器只會分配四個字節的內存
例如:
/*
void sed(char *p1);void sed(char* p1)
void send(char**p1);void send(char * * p1);
void send(char ***p1);void send(char *p[])
void send(char (*p)[10]);void send(char ******p);
*/
二間接賦值時指針存在最大的意義
1指針變量和他所指向的內存空間是兩碼事
int a=10;
a=15; //直接賦值
int *p=NULL;
*p=20; //*p 放在左邊就是間接修改了a的值 這樣體現出的意義不大
但是如果用在函數傳參那就不一樣了;
int Ge(int*p)
{
*p=30;
}
int main()
{
int a=10;
Ge(&a)
}
有點事 下次再補充
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。