網(wǎng)站首頁 編程語言 正文
指針如何指向數(shù)組,并讀取數(shù)組中的元素:
#include <stdio.h> int main() { int arr[3] = {1,2,3}; int *p; p = &arr[0];//此句也可以寫成 p = arr; for(int i=0;i<3;i++) { printf("第%d個元素值為:%d\n",i,*(p+i)); /*應(yīng)注意這里指針的定義類型;p+i并不是指p的地址+1, 而是偏移一個類型的字節(jié)數(shù),這里的類型是int,所以偏移4個字節(jié)*/ } //printf("首元素為:%d\n",*p); return 0; }
指針和數(shù)組更深刻理解
#include <stdio.h> //指針可以當(dāng)數(shù)組名 使用下標(biāo)法 //數(shù)組名也可以像指針一樣拿來加 int main() { int arr[3] = {1,2,3}; int *p = arr; printf("%d ",*p);//這里還可以寫成:printf(“%d “,p[0]);即把指針當(dāng)成所指向的數(shù)組 printf("%d ",p[0]); printf("%d ",*(p+1)); printf("%d ",*(arr+1)); /*上面看出指針跟數(shù)組比較混,區(qū)別在下: 你可以寫*p++,但不能寫*arr++; 因為: p是一個指針變量,即保存地址的變量 arr可理解為是一個指針常量 */ putchar('\n'); printf("arr大小:%d\n",sizeof(arr)); printf("p大小:%d\n",sizeof(p));//指針就是地址,地址在os中用8個字節(jié)表示 printf("int大小:%d\n",sizeof(int)); //上面的比較可以看出數(shù)組與指針的其他區(qū)別 return 0; }
小測試:使用指針,函數(shù)封裝實現(xiàn)數(shù)組元素的逆序輸出
#include <stdio.h> //使用指針,函數(shù)封裝實現(xiàn)數(shù)組元素的逆序輸出 void getarr(int *arr,int *size) { for(int i=0;i<*size;i++) { printf("請輸入第%d個數(shù):\n",i); scanf("%d",arr++); } } void nixuarr(int *arr,int *size) { int temp,i,j; for(i=0;i<*size/2;i++) { j = *size-1-i; temp = *(arr+i); *(arr+i) = *(arr+j); *(arr+j) = temp; } } void printarr(int *arr,int *size) { for(int i=0;i<*size;i++) { printf("%d ",*(arr+i)); } putchar('\n'); } int main() { int arr[5]; int size; size = sizeof(arr)/sizeof(arr[0]); getarr(&arr[0],&size); printf("逆序前:\n"); printarr(&arr[0],&size); nixuarr(&arr[0],&size); printf("逆序后:\n"); printarr(&arr[0],&size); return 0; }
多維數(shù)組的地址
定義一個二維數(shù)組int a[3][4]為例,其中a表示二維數(shù)組名,也是整個數(shù)組首地址;a[0],a[1],a[2]分別表示每個一維數(shù)組的名,也分別是第0、1、2列元素的地址;也就是說a[0]的值是&a[0][0],a[1]的值是&a[1][0]。其中*a是*(a+0),也就是a[0]。
例:
#include <stdio.h> int main() { int arr[3][4]={{1,2,3,4},{4,5,6,7},{5,6,7,8}}; printf("arr地址:%p,偏移一個后是%p\n",arr,arr+1);//發(fā)現(xiàn)此句偏移16位 printf("arr[0]地址:%p,偏移一個后是%p\n",arr[0],arr[0]+1);//此句偏移4位 printf("*(arr+0)地址:%p,偏移一個后是%p\n",*(arr+0),*(arr+0)+1);//同上一句 return 0; }
#include <stdio.h> int main() { int arr[3][4]={{1,2,3,4},{4,5,6,7},{5,6,7,8}}; int i,j; for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("地址:%p,值是%d\n",&arr[i][j],arr[i][j]); printf("地址:%p,值是%d\n",arr[i]+j,*(arr[i]+j)); printf("地址:%p,值是%d\n",*(arr+i)+j,*(*(arr+i)+j)); printf("--------------------------------------------------\n"); } } return 0; }
#include <stdio.h> int main() { int arr[3][4]={{1,2,3,4},{4,5,6,7},{5,6,7,8}}; int i,j; int (*p)[4]; p = arr; //上面這種定義叫數(shù)組指針,類似于一維數(shù)組定義一個*p //這里的數(shù)組指針等同于二維數(shù)組名 for(i=0;i<3;i++) { for(j=0;j<4;j++) { printf("值是%d\n",*(*(p+i)+j)); } } return 0; }
總結(jié)
原文鏈接:https://blog.csdn.net/m0_58570301/article/details/122162223
相關(guān)推薦
- 2023-04-12 Docker?login和logout的使用_docker
- 2022-05-27 react使用axios進(jìn)行api網(wǎng)絡(luò)請求的封裝方法詳解_React
- 2022-10-14 Ubuntu18.04使用Xorg創(chuàng)建虛擬屏幕
- 2023-07-22 SpringBoot中@Cacheable如何使用
- 2022-03-18 C語言實現(xiàn)一個閃爍的圣誕樹_C 語言
- 2021-11-09 Android如何實現(xiàn)時間線效果(下)_Android
- 2023-03-29 nginx部署前端項目的超級詳細(xì)步驟記錄_nginx
- 2022-12-29 R語言中dnorm,pnorm,qnorm和rnorm的區(qū)別淺析_R語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支