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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C语言指针详解(通俗易懂)

發(fā)布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言指针详解(通俗易懂) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

剛開始接觸C語言,對C語言中的指針有一點不能理解,接著還有一個"&"符號感覺兩者有點接近和混淆。兩者的定義如下:

  • &是取地址符號
  • *是定義指針變量,即指向內存單元的指針

指針是C/C++語言的特色,它允許程序員直接操縱內存,所以說C語言是一種高效的語言。很多語言屏蔽了編程人員直接操縱內存的權限去降低軟件開發(fā)的難度。

&

#include<stdio.h> int main() {int a=20;printf("a 的值為%d\n",a);printf("a 的地址為%d\n",&a);return 0; } //打印結果: a 的值為20 a 的地址為1703740(1703740為a地址0019FF3C的十進制)

& 符號的作用很清晰, &a就是取變量a的地址。


*

#include<stdio.h> int main() {int a=20;int *ip;ip=a;printf("ip 的值為%d\n",ip);printf("*ip 的值為%d\n",*ip);return 0; } //打印結果: ip 的值為20

為什么只打印了一個值呢?剛開始學習不是很懂,回去查指針變量的定義,再加上網(wǎng)上查閱各種資料,定義說:*表示一個指針變量,指向內存單元,指向內存單元,應該就是地址吧,那么ip變量應該被賦值一個地址,前邊說的 & 不就表示一個地址嗎,試一下

#include <stdio.h>int main () {int a=5;int *b;b=&a;printf("a 的值為 %d\n",a);printf("&a 的值為 %d\n",&a);printf("b的值為%d\n",b);printf("*b 的值為 %d\n",*b); } //打印結果: a 的值為 5 &a 的值為 1703740 b的值為1703740 *b 的值為 5

定義變量時int* a;int* 表示取指針,在地址前加*表示這個地址的內容。

函數(shù)指針和指針函數(shù)

函數(shù)指針的定義:
returnType (*pointerName)(param list);
指針函數(shù)的定義:
returnType *pointerName(paramlist);

returnType 為函數(shù)返回值類型,pointerNmae 為指針名稱,param list 為函數(shù)參數(shù)列表,函數(shù)指針賦值為函數(shù)地址。注意:( )的優(yōu)先級高于*,第一個括號不能省略,如果寫作returnType *pointerName(paramlist);就成了函數(shù)原型(指針函數(shù)),它表明函數(shù)的返回值類型為returnType *,返回值類型為1個指針。

調用函數(shù)直接調用就好了,為什么還要定義一個函數(shù)指針呢,才接觸時很不理解,后了解到由于函數(shù)指針存儲的是一個內存地址,在傳參的時候傳入一個地址比傳入一個地址對應的函數(shù)名更高效,運算速度更快。

數(shù)組指針

數(shù)組是一種結構類型,在某種意義上來說數(shù)組名就是指針,可以轉化為指向其實體的指針,指針則是變量,僅僅意味著數(shù)組的存放地址,數(shù)組名概念比較寬泛,也更加復雜,而指針僅僅代表數(shù)組的首地址

#include <stdio.h>int main() {int a[]={1,2,3,4,5};int *p=a;printf("數(shù)組a首地址%d\n",&a);//數(shù)組a首地址1703724printf("數(shù)組a首地址%d\n",p);//數(shù)組a首地址1703724printf("a所占空間%d\n",sizeof(a));//a所占空間20(a代表整個數(shù)組,大小為4*5=20)printf("*p所占內存空間%d\n",sizeof(p));//*p所占內存空間4(*p僅僅指向首地址)printf("*p指向地址的內容%d\n",*p);//*p指向地址的內容1return 0;}

指向指針的指針

#include<stdio.h> #include<stdlib.h>int main(){char *s[]={"aaa","bbb","ccc","ddd"};char **p;//定義指向指針的指針int k;for(k=0;k<4;k++){p=&s[k];//指針賦值為地址 如果不加則為s[k]的內容,會出錯printf("%s\n",*p);//使用*p訪問指針所指向地址的內容}return 0;}

總結

  • &a表示a變量的地址,scanf("%d",&a)中&a就是將輸入的值存入a變量的地址中
  • *ip定義一個指針變量ip,ip代表指針變量,賦值內容為地址(即指向變量的地址)
  • *ip表示值是地址的變量,訪問的是ip地址內容
  • 在數(shù)組中指針變量僅僅代表數(shù)組的首地址,數(shù)組名就數(shù)組的首地址
  • 總結

    以上是生活随笔為你收集整理的C语言指针详解(通俗易懂)的全部內容,希望文章能夠幫你解決所遇到的問題。

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