【C语言】指针基础知识点汇总
指針(一) 基礎(chǔ)
一 指針的概念
指針的四要素
?
二 指針的定義
1 運(yùn)算符
*: 定義時(shí),表示定義的是一個(gè)指針 其他的時(shí)候表示解析引用
&: 取地址符(用于取地址)
2 定義
指針的定義有多種理解方式;
反推:
三 指針的內(nèi)存
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-naQJWXaU-1644340436740)(C:\Users\admin\Desktop\六星教育\學(xué)習(xí)\指針\指針(一)]\指針基礎(chǔ)(一)1-1.png)
四 指針的初始化與賦值
1 用對應(yīng)類型變量的地址
int num = 10;int* pn = # //初始化float f = 3.14f;float* pf;pf = &f; //賦值2 用相同類型的指針
int num = 10;int* pn = # // 初始值int* p1 = pn; // 初始化int* p2;p2 = pn; // 賦值3 直接用地址
int* p = (int*)0x36;4 用數(shù)組名
一級指針可以接受一堆一位數(shù)組的數(shù)組名
int arr[5] = { 1,2,3,4,5 };int* p = arr;5 字符串
#include <stdio.h> int main() {// 數(shù)組名就是數(shù)組的首地址char arr[5] = { 'a','b','c' };char* p = arr;printf("%s\n",p); //輸出:abcchar str[5] = "abcd";p = str;printf("%s\n", str); //輸出:abcdprintf("%s\n", p); //輸出:abcd// ==> char*類型的指針可以直接用來打印整個(gè)字符串到'\0'停止const char* p1;p1 = "1234";printf("%s\n",p1); //輸出:1234const char* p2 = "Mushan";printf("%s\n",p2); //輸出:Mushanreturn 0; }6 置空
int* p = NULL;int* p1 = (int*)0x0; /*NULL: #define NULL 00地址有時(shí)候,指針定義好了,但是暫時(shí)沒有指向或者是,指針用完了,沒有指向了指針不知道指向哪里(會(huì)隨機(jī)指向)此時(shí)的指針,很危險(xiǎn)(野指針)所以 這些情況下的指針統(tǒng)一安排一個(gè)地址給他們指向指向0地址 */7 多級指針
#include<stdio.h>int main() {int num = 10;printf(" num = %d\n", num); // num = 10;printf("&num = %X\n", &num); // &num = 10FFA78int* p = #printf("*p = %d\n", *p); // *p = 10 (num值)printf(" p = %X\n", p); // p = 10FFA78 (num的地址)printf("&p = %X\n", &p); // &p = 10FFA6Cint** pp = &p; // 一個(gè)二級指針printf("**pp = %d\n", **pp); // **pp = 10 (num值)printf(" *pp = %X\n", *pp); // *pp = 10FFA78 (num的地址)printf(" pp = %X\n", pp); // pp = 10FFA6C (p的地址)printf(" &pp = %X\n", &pp); // &pp = 10FFA60 int*** ppp = &pp; // 一個(gè)三級指針printf("***ppp = %d\n", ***ppp); // ***ppp = 10 (num值)printf(" **ppp = %X\n", **ppp); // **ppp = 10FFA78 (num地址)printf(" *ppp = %X\n", *ppp); // *ppp = 10FFA6C (p的地址)printf(" ppp = %X\n", ppp); // ppp = 10FFA60 (pp的地址)printf(" &ppp = %X\n", &ppp); // &ppp = 10FFA54return 0; }五 指針的加減法
核心:指針本身的值(指向)沒有變化
指針偏移
指針可以加上或減去一個(gè)整數(shù)
指針加上或減去一個(gè)整數(shù)后,實(shí)際上是進(jìn)行了偏移
偏移的范圍是加上或減去的整數(shù)個(gè)單位
單位: 指針指向的類型在內(nèi)存中所占字節(jié)數(shù)
偏移:指針指向不變,但是可以根據(jù)偏移量取內(nèi)容
六 指針的自增自減
自增自減,會(huì)改變指針指向
++:表示指針向后移動(dòng)一個(gè)單位
– :表示指針向前移動(dòng)一個(gè)單位
單位:指針指向的類型在內(nèi)存所占內(nèi)存中所占的字節(jié)數(shù)
#include <stdio.h> int main() {int num = 10;int* p = #printf("%X\n", p); // EFFB5Cprintf("%X\n", p + 1); // EFFB60printf("%d\n",*p); // 10printf("%X\n", p += 1); // EFFB60printf("%d\n",*p); // -858993460(無意義)return 0; }七 通過指針遍歷數(shù)組
遍歷一維數(shù)組
#include <stdio.h> int main() {int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };for (size_t i = 0; i < 10; i++){printf("%2d", arr[i]);}printf("\n");int* p = arr;// p和arr,除了arr是一個(gè)常量之外,其他幾乎是一樣的for (size_t i = 0; i < 10; i++){printf("%2d", p[i]);}printf("\n");printf("%d\n", p[0]); // 0printf("%d\n", *(p + 0)); // 0printf("%d\n", p[1]); // 1(先偏移 后取值)printf("%d\n", *(p + 1)); // 1// p[n] <==> *(p+n)return 0; } // p[n]:叫做下標(biāo)形式 // *(p+n):叫做指針偏移的形式遍歷二維數(shù)組
二維數(shù)組也是數(shù)組
二維數(shù)組可以看成元素是一維數(shù)組的一維數(shù)組
數(shù)組的內(nèi)存是連續(xù)的
總結(jié)
以上是生活随笔為你收集整理的【C语言】指针基础知识点汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云笔记软件有很多,哪款笔记比较好用?
- 下一篇: wifi 破解笔记