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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

指针,c语言的灵魂

發布時間:2024/4/17 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 指针,c语言的灵魂 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

指針是一個值為內存地址的變量。

變量是一塊內存空間,指針是變量,是用來存儲內存地址的變量。

#include <stdio.h> #include <stdlib.h>int main() {int num = 9;printf("num變量的地址為:%p\n",&num); // p表示指針占位符return 0; }

#include <stdio.h> #include <stdlib.h>int main() {int num = 9;int * ptr_num = &num;printf("num變量的地址為:%p\n",ptr_num); // p表示指針占位符return 0; }

根據地址,找到空間!然后操作空間!

變量地址也占用空間,只不過占用的不是內存空間,而是寄存器的存儲空間。

內存地址實際上是一種偏移量,存儲于段寄存器中。內存地址只是一種抽象,不是真正的物理內存地址,而是邏輯地址。由邏輯地址尋找到物理地址需要經過 邏輯地址->線性地址->物理地址 轉換過程,而這些過程都是基于寄存器完成的。

#include <stdio.h> #include <stdlib.h>int main() {int num = 9;int * ptr_num = &num;* ptr_num = 10;printf("* ptr_num的值為:%d\n",* ptr_num);printf("num的值為:%d\n",num); // p表示指針占位符return 0; }

指針的類型,跟他所指向的數據結構有關。
基本類型的指針指向基本類型的數據結構。
比如:char * p; int p; float p; double *p;
分別指向的是char, int ,float, double 類型的變量。

#include <stdio.h> #include <stdlib.h>int main() {int num1 = 1024;int num2 = 2048;int * ptr1;int * ptr2;ptr1 = &num1;ptr2 = &num2;printf("num1的值是%d\tnum1的地址是:%p\n",num1,ptr1);printf("num2的值是%d\tnum2的地址是:%p\n",num2,ptr2);// 將變量1的值賦給變量2num2 = num1;printf("num1的值是%d\tnum1的地址是:%p\n",num1,ptr1);printf("num2的值是%d\tnum2的地址是:%p\n",num2,ptr2);*ptr2 = *ptr1; // 等價于 num2 = num1printf("num1的值是%d\tnum1的地址是:%p\n",num1,ptr1);printf("num2的值是%d\tnum2的地址是:%p\n",num2,ptr2);// 地址變了,num1,num2不受影響ptr2 = ptr1;printf("num1的值是%d\tnum1的地址是:%p\n",num1,ptr1);printf("num2的值是%d\tnum2的地址是:%p\n",num2,ptr2);return 0; }

一個變量就是一個內存空間,內存一定是有物理地址的!指針就是保存變量內存物理地址的變量!

指針與數組

數組是一個連續的內存空間,數組名就是它的首地址。

#include <stdio.h> #include <stdlib.h>int main() {double score[] = {98,87,65,43,76};printf("數組的首地址:%p\t 數組手元素的地址 :%p\n",score,&score[0]);}

數組名就是數組元素的首地址。

#include <stdio.h> #include <stdlib.h>int main() {int i;double score[5] = {98,87,65,43,76};double * ptr_score;ptr_score = score;for (i=0;i<5;i++) {printf("%.2lf\n",*ptr_score++); // 通過首地址取找數組元素的值}for (i=0;i<5;i++) {printf("%.2lf\n",score[i]);}}

等價的!double類型的數據,每個數據移動了8個字節。物理地址是一個十六進制的數字。

#include <stdio.h> #include <stdlib.h>int main() {int array[] = {15,20,25,30,35};int i;int * ptr_array = array;for (i = 0;i<5;i++) {printf("第%d個元素的值為%d,地址為%p\n",i,*ptr_array,ptr_array);ptr_array ++ ;}/*第0個元素的值為15,地址為0028FF0C第1個元素的值為20,地址為0028FF10第2個元素的值為25,地址為0028FF14第3個元素的值為30,地址為0028FF18第4個元素的值為35,地址為0028FF1C*/return 0; }

int型地址間隔4個字節。

#include <stdio.h> #include <stdlib.h> #include <math.h> #define N 7int main() {int array[N] = {15,20,25,30,35,40,90};int i;int temp;// 實現數組的逆序// 數組的首尾元素進行交換for (i = 0;i<floor(N/2);i++) {temp = array[i];array[i] = array[N-i-1];array[N-i-1] = temp;}for (i = 0;i<N;i++) {printf("交換后第%d元素的值為:%d\n",i,*(array + i));}return 0; }

逆序數組,找規律是寫程序必備的技能!

#include <stdio.h> #include <stdlib.h> #include <math.h> #define N 7int main() {int array[N] = {15,20,25,30,35,40,90};int i;int temp;int * ptr_head;int * ptr_foot;ptr_head = &array[0];ptr_foot = &array[N-1];// 實現數組的逆序// 數組的首尾元素進行交換for (i = 0;i<floor(N/2);i++) {temp = * ptr_head;* ptr_head = * ptr_foot;* ptr_foot = temp;ptr_head ++;ptr_foot --;}for (i = 0;i<N;i++) {printf("交換后第%d元素的值為:%d\n",i,*(array + i));}return 0; }

指針實現數組逆序!

二維數組與指針

首地址

&a[0][0]

有祥有略!有精有簡!有的放矢有的取舍去學習!

何為二維數組,如何理解?由n個一維數組組成!

#include <stdio.h> #include <stdlib.h> #include <math.h>int main() {int i,j;double score[5][3] = {{55,56,57},{58,59,60},{61,62,63},{64,65,66},{67,68,69}};// 傳統的訪問方式for (i = 0;i < 5;i++) {for (j = 0;j <3 ;j++) {printf("%.2lf\t",score[i][j]);}printf("\n");}printf("=================================\n");// 指針的方式訪問for (i = 0;i < 5;i++) {for (j = 0;j <3 ;j++) {// printf("%.2lf\t",*(score[i] + j));printf("%.2lf\t",*(*(score+i) + j));}printf("\n");}return 0; }

*(*(score + i) + j) 獲取二維數組的公式!

老九語錄,會賦值,會打印就差不多了!多練習練習再做個小項目就可以了!

總結

以上是生活随笔為你收集整理的指针,c语言的灵魂的全部內容,希望文章能夠幫你解決所遇到的問題。

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