日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多级指针和静动态内存的跨函数访问

發布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多级指针和静动态内存的跨函数访问 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:多級指針(靜動態內存的跨函數訪問)
作者:枕上
發布時間:2021-07-15 00:27:17
網址:https://blog.csdn.net/jinchi_boke/article/details/118724993?spm=1001.2014.3001.5501

目錄

  • 多指針初認識:
  • 動態內存和多級指針的跨函數訪問
  • 動態內存和靜態內存的比較:
  • 靜態內存不可以跨函數訪問:
  • 動態內存跨函數訪問:

多指針初認識:

#include <stdio.h> #include <stdlib.h> int main() {int i = 100;int *p = &i;int **q = &p;int ***r = &q;//r = &p; //error 因為r是 int*** 類型,r只能存放 int** 類型變量的地址printf("i = %d\n",***r); system("pause");return 0; }

輸出結果:

i = 100

動態內存和多級指針的跨函數訪問

#include <stdio.h> #include <stdlib.h>void f(int **p) {*p = 10; }int main() {int *p = (int *)malloc(4);f(&p); printf("*p = %d\n",p);system("pause");return 0; }

輸出結果:

*p = 10

動態內存和靜態內存的比較:

靜態內存是由系統自動分配,由系統自動釋放

靜態內存是在棧分配的

動態內存由程序員手動分配,手動釋放

動態內存是在堆分配的

靜態內存不可以跨函數訪問:

通俗說就是:當被調用的函數結束后,被調用函數里面的靜態內存不能被其他函數訪問。

#include <stdio.h> #include <stdlib.h>void f(int **q) {int i = 10;//*q等價于p q和**q都不等價于p//*q =i;//error 因為*q = i等價于p = i;這樣寫是錯誤的*q = &i; //等價于 p = &i; }int main() {int *p;f(&p);printf("%d\n",*p); //本語句語法沒有問題,但是邏輯上有問題system("pause");return 0; }

輸出結果:

10

這個程序運行是能正常輸出的,但是程序是錯誤的,邏輯上有錯誤。

因為當 f( ) 函數執行完畢之后,函數終結(也就是函數的出棧),此時函數靜態分配的變量的空間會被全部釋放,靜態變量的空間訪問權限會還給操作系統,我們不能再對他進行讀寫操作。具體到這個 f( ) 函數就是 ,變量 q 沒了,變量 i 沒了, i 的值 10 也沒有了。也可以說 p 指向 的 變量 i 的空間沒了。

那么main 函數 就不能訪問 i 的值,也就是 printf("%d\n",*p) 中的 *p 邏輯上是不可以的。

但是 指針P 可以存放著 i 的地址。但是不能訪問 i 的空間,沒有權限進行讀寫操作。

動態內存跨函數訪問:

malloc堆分配的動態內存,不會隨著函數的結束而被釋放,只有手動free才會被釋放

#include <stdio.h> #include <stdlib.h>void f(int **q) {*q = (int *)malloc(sizeof(int)); //等價于 p=(int *)malloc(sizeof(int)) //q = 10; //error//*q = 10; //等價于 p = 10;**q = 10; //等價于 *p = 10; }int main() { int *p = (int *)malloc(4);f(&p); printf("*p = %d\n",*p);system("pause");return 0; }

輸出結果:

*p = 10

總結

以上是生活随笔為你收集整理的多级指针和静动态内存的跨函数访问的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。