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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

c语言 指针函数 详解,[NOTE-C]C语言指针详解(一)

發布時間:2025/4/5 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言 指针函数 详解,[NOTE-C]C语言指针详解(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C語言指針讓一切想法變成可能,強轉和指針可以看做一項呼風喚雨的利器,但是C語言中指針應用又需要格外的小心,其更靈活的利用內存,因為不當的應用可能引起各種異常,這篇文章就是讓我們一起來認識C指針,更好的利用C指針!

指針變量的定義初始化和解引用

內存如何編址?

內存中的每個字節都有唯一的編號(地址),內存地址按字節編號,其字長一般與主機相同,32位機器使用32位地址,最多支持2^32字節內存(4G)

地址是一個無符號整數,從0開始依次遞增,通常地址寫成16進制。

如何對變量進行尋址?

直接尋址

直接到變量名標示的存儲單元中讀取變量的值

scanf("%d", &a);//假如忘記寫&符號,a的值被當成地址。比如a為100,則會覆蓋內存中地址為100位置的值。

printf("a=%d\n",a);

間接尋址

通過其他變量間接地找到變量地址讀取變量的值

用什么類型來存儲地址? 指針Pointer類型

指針變量

具有指針類型的變量

保存32位地址值 sizeof(pa)是4個字節

用什么數據類型去理解他所指向的存儲單元中的數據呢?

int *pa; int *pa = &a

int 指針變量指向的數據類型 稱為基類型

指針變量的內容 &a

指針變量pa是變量a的指針

如何顯示變量的地址

使用%p格式符

變量指針只能指向同一基類型的變量

使用未初始化的指針會怎樣?

指針變量使用之前必須初始化

若不知指向哪里 那就指向NULL(stdio.h中 定義為0)

NULL是什么

空指針-值為NULL的指針 即無效指針

問題:p=0和p=NULL有什么區別

A:*p=NULL可以明確的說明p是指針變量,而不是數值型變量

問題:空指針就是指向地址為0的存儲單元的指針對么?

A:不一定,并非所有編譯器都是用0地址,某些編譯器為空指針適用不存在的內存地址

如何訪問指針變量指向的存儲單元中的數據

通過間接尋址運算符訪問(引用)指針變量指向的變量的值

指針的解引用(Pointer Dereference)

*pa

指針變量的定義和初始化

正確方式

int *pa,*pb;

錯誤方式

int *pa,pb;

需要嚴格注意區分

指針變量作為函數參數

指針變量的解引用如何理解

間接尋址運算符 此* 非彼*

只要pa指向a,*pa就是a的別名

指針變量做參數有何優勢

基本類型的變量做函數參數

Call By Value Passing arguments by value

實參變量的值->形參(parameter)

在被函數中不能改變實參的值

指針類型的變量做函數參數

Simulating Call by reference- Passing arguments by reference

是參變量的地址->指針形參(pointer parameter)

在被調函數中可以改變實參的值

Call by value

#include

void Fun(int par);

int main()

{

int arg = 1 ;

printf("arg = %d\n", arg);

Fun(arg);

printf("arg = %d\n", arg);

return 0;

}

void Fun(int par)

{

printf("par = %d\n", par);

par = 2;

return 0;

}

Call by reference

#include

void Fun(int *par);

int main()

{

int arg = 1 ;

printf("arg = %d\n", arg);

Fun(&arg);

printf("arg = %d\n", arg);

return 0;

}

void Fun(int *par)

{

printf("par = %d\n", *par);

*par = 2;

return 0;

}

指針變量作形參為函數

提供了修改實參值的手段

實戰:兩數交換

方案一:使用指針變量

需要注意

* 要傳遞地址給指針

* 實參形參數據類型要一致

* temp為整形 這里不要寫錯為指針類型

int main()

{

int a = 5, b = 9;

Swap(&a, &b);

printf("a=%d,b=%d",a,b);

return 0;

}

void Swap(int *x, int *y)

{

int temp;

temp = *x;

*x = *y;

*y = temp;

}

方案二:通過數組

數組這里也是傳引用

int main()

{

int a[2] = {5, 9};

Swap(a);

printf("%d,%d", a[0],

a[1]);

return 0;

}

void Swap(int p[])

{

int temp;

temp = p[0];

p[0] = p[1];

p[1] = temp;

}

想了解更多其他技術博文,后續更多文章可以在Montage GTD來訂閱RSS啦

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的c语言 指针函数 详解,[NOTE-C]C语言指针详解(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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