【C语言】指针基础知识点汇总
生活随笔
收集整理的這篇文章主要介紹了
【C语言】指针基础知识点汇总
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
指針(一) 基礎
一 指針的概念
指針的四要素
?
二 指針的定義
1 運算符
*: 定義時,表示定義的是一個指針 其他的時候表示解析引用
&: 取地址符(用于取地址)
2 定義
指針的定義有多種理解方式;
反推:
三 指針的內存
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-naQJWXaU-1644340436740)(C:\Users\admin\Desktop\六星教育\學習\指針\指針(一)]\指針基礎(一)1-1.png)
四 指針的初始化與賦值
1 用對應類型變量的地址
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 用數組名
一級指針可以接受一堆一位數組的數組名
int arr[5] = { 1,2,3,4,5 };int* p = arr;5 字符串
#include <stdio.h> int main() {// 數組名就是數組的首地址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*類型的指針可以直接用來打印整個字符串到'\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地址有時候,指針定義好了,但是暫時沒有指向或者是,指針用完了,沒有指向了指針不知道指向哪里(會隨機指向)此時的指針,很危險(野指針)所以 這些情況下的指針統一安排一個地址給他們指向指向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; // 一個二級指針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; // 一個三級指針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; }五 指針的加減法
核心:指針本身的值(指向)沒有變化
指針偏移
指針可以加上或減去一個整數
指針加上或減去一個整數后,實際上是進行了偏移
偏移的范圍是加上或減去的整數個單位
單位: 指針指向的類型在內存中所占字節數
偏移:指針指向不變,但是可以根據偏移量取內容
六 指針的自增自減
自增自減,會改變指針指向
++:表示指針向后移動一個單位
– :表示指針向前移動一個單位
單位:指針指向的類型在內存所占內存中所占的字節數
#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; }七 通過指針遍歷數組
遍歷一維數組
#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是一個常量之外,其他幾乎是一樣的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]:叫做下標形式 // *(p+n):叫做指針偏移的形式遍歷二維數組
二維數組也是數組
二維數組可以看成元素是一維數組的一維數組
數組的內存是連續的
總結
以上是生活随笔為你收集整理的【C语言】指针基础知识点汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云笔记软件有很多,哪款笔记比较好用?
- 下一篇: wifi 破解笔记