C語言 指針數組-字符指針數組整型指針數組 char*s[3] int*a[5] 數組指針int(*p)[4]

基本介紹

1.指針數組:由n個指向整型元素的指針而組成,里面存放指針
Int *ptr[3];

2.地址:
ptr[i]:元素地址
&ptr[i]:指針地址

圖示

代碼:
在這里插入圖片描述
內存布局:
在這里插入圖片描述

代碼

#include<stdio.h>
#include<string.h>
//指針數組--int
void pointer(int *arr,int len)
{int i, *ptr[10];for(i=0;i<len;i++){ptr[i]=&arr[i];printf("arr[%d]=%d address=%p\n",i,arr[i],&arr[i]);printf("ptr[%d]=%d address=%p self-address=%p\n",i,*ptr[i],ptr[i],&ptr[i]);}
}//指針數組--char
void cpointer(char* s,int len)
{char *c[4];int i=0;printf("s=%s address=%p self-address=%p\n",s,s,&s);while(i<len){c[i]=&s[i];printf("c[%d]=%c address=%p self-address=%p\n",i,*c[i],c[i],&c[i]);i++;}
}void cpointer2(char *s,int len)
{char *c[4];int i;printf("s=%s address=%p self-address=%p\n",s,s,&s);for(i=0;i<len;i++){c[i]=&s[i];}char *p=c[0];for(i=0;i<len;i++){printf("c[%d]=%c address=%p self-address=%p\n",i,*p,p,&p);p++;}
}
int main()
{int i,arr[10];int len=sizeof(arr)/sizeof(int);char *s="uiop";for(i=0;i<len;i++){arr[i]=99;}printf("int_pointer:\n");pointer(arr,len);printf("char_pointer:\n");cpointer(s,strlen(s));printf("char_pointer2:\n");cpointer2(s,strlen(s));getchar();return 0;
}

輸出:

int_pointer:
arr[0]=99 address=010FF984
ptr[0]=99 address=010FF984 self-address=010FF854
arr[1]=99 address=010FF988
ptr[1]=99 address=010FF988 self-address=010FF858
arr[2]=99 address=010FF98C
ptr[2]=99 address=010FF98C self-address=010FF85C
arr[3]=99 address=010FF990
ptr[3]=99 address=010FF990 self-address=010FF860
arr[4]=99 address=010FF994
ptr[4]=99 address=010FF994 self-address=010FF864
arr[5]=99 address=010FF998
ptr[5]=99 address=010FF998 self-address=010FF868
arr[6]=99 address=010FF99C
ptr[6]=99 address=010FF99C self-address=010FF86C
arr[7]=99 address=010FF9A0
ptr[7]=99 address=010FF9A0 self-address=010FF870
arr[8]=99 address=010FF9A4
ptr[8]=99 address=010FF9A4 self-address=010FF874
arr[9]=99 address=010FF9A8
ptr[9]=99 address=010FF9A8 self-address=010FF878
char_pointer:
s=uiop address=006B5814 self-address=010FF894
c[0]=u address=006B5814 self-address=010FF878
c[1]=i address=006B5815 self-address=010FF87C
c[2]=o address=006B5816 self-address=010FF880
c[3]=p address=006B5817 self-address=010FF884
char_pointer2:
s=uiop address=006B5814 self-address=010FF894
c[0]=u address=006B5814 self-address=010FF860
c[1]=i address=006B5815 self-address=010FF860
c[2]=o address=006B5816 self-address=010FF860
c[3]=p address=006B5817 self-address=010FF860

字符數組指針

具體分析

#include<stdio.h>
#include<string.h>
int main()
{char *p[]={"水滸傳","三國演義","西游記","紅樓夢"};int i=0;printf("方法1:\n");for(i=0;i<4;i++){/*字符指針char *pstr="good dog ww";printf("字符指針指向的字符串內容:%s\n",pstr);所以這里的%s-->p[i]數組:地址傳遞(指針)%c *pstr是取出一個字符這里不能*p[i],p[i]本身就是一個字符數組指針,無法單獨取出一個字符*/
//p[0]="水滸傳" %s p[0]就直接是取出字符串printf("p[%d]=%s address=%p self-address=%p\n",i,p[i],p[i],&p[i]);}printf("方法2:\n");char *ptr=p[0];i=0;while(i<=3){printf("p=%s address=%p self-address=%p\n",ptr,ptr,&ptr);i++;ptr=p[i];//每一個p[i]的字符內容不同,導致其間隔不同,所以不能使用ptr++}getchar();return 0;
}

整型數組指針

#include<stdio.h>
#include<string.h>
//整型指針
int main()
{int a=1,b=2,c=4,d=90;int*a1=&a,*a2=&b,*a3=&c,*a4=&d;int *arr[]={a1,a2,a3,a4};int i;printf("方法1:\n");for(i=0;i<4;i++){//arr[0]=a1=&a=1的地址--%d arr[i]只會取到地址//*arr[i]才能取到值printf("arr[%d]=%d address=%p self-address=%p\n",i,*arr[i],arr[i],&arr[i]);}printf("方法2:\n");i=0;int *p=arr[0];while(i<=3){printf("arr[%d]=%d address=%p self-address=%p\n",i,*p,p,&p);i++;p=arr[i];//p++不行 隨機存儲的,+1不是下一個元素的地址}getchar();return 0;
}

區分

指針數組:
由n個指向整型元素的指針而組成,里面存放指針
Int *ptr[3];

數組指針:
指向一個有n個元素的數組的指針,里面存放的是整型變量(int類型長度為n的數組的首地址),存的是一個數組地址,而不是單個元素
int(*p)[n]
代碼詳解

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//指針使用 int(*p)[n]與int *p[n]的區別
int main()
{int i;// int(*p)[n]--指向一個有n個元素的數組的指針,里面存放的是整型變量(int類型長度為n的數組的首地址)//存的是一個數組地址,而不是單個元素int a[3]={1,2,3};int b[3][3]={{1,4,0},{2,5,6},{7,6,8}};int(*arr)[3]=b;printf("int(*arr)[n]:\n");for(i=0;i<3;i++){printf("arr[%d]=%d address=%p self-address=%p\n",i,*arr[i],arr[i],&arr[i]);}//int *p[n]--指針數組,由n個指向整型元素的指針而組成,里面存放指針int *p[3];for(i=0;i<3;i++){p[i]=&a[i];}printf("int*p[n]:\n");for(i=0;i<3;i++){//數組printf("arr[%d]=%d address=%p self-address=%p\n",i,*p[i],p[i],&p[i]);}getchar();return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446546.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446546.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446546.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

uninitialized_copy測試代碼示例

原測試代碼如下&#xff1a; int main() {vector<int>v1{1,3,5,7,9,2,4,6,8};allocator<int>alloc;auto data alloc.allocate(9);uninitialized_copy(v1.begin(),v1.end(), data);auto end data 9;while(data!end) {cout << *data <<" "…

C語言的地址 內存

取地址在CPU的寄存器產生&#xff0c;不占據內存地址由計算器總線&#xff0c;地址作為常量不消耗內存指針 存儲不同的地址&#xff0c;間接賦值空類型指針 void* 類型指針 不可以取數據 或者修改數據 需要進行強制類型轉換int num 10;void *p &num;std::cout << …

C語言 多重指針--整型字符字符串 int**pp

介紹 多重指針:一個指針指向另一個指針 離值越近的指針級別越大:一級 內存布局 代碼 圖示: 多重指針–整型 #include<stdio.h> #include<string.h> //多重指針--整型//二級指針 void two() {printf("二級指針:\n");int a896;int *p&a,**pp&…

C++ primer 第13章 拷貝控制

文章目錄前言拷貝、賦值與銷毀拷貝構造函數合成拷貝構造函數拷貝初始化和直接初始化拷貝初始化的發生&#xff1a;參數和返回值拷貝初始化的限制拷貝賦值運算符重載賦值運算符合成拷貝賦值運算符析構函數析構函數完成的工作什么時候會調用析構函數合成析構函數代碼片段調用幾次…

牛客網C++面經 C++11

請問C11有哪些新特性&#xff1f; auto關鍵字&#xff1a;編譯器可以根據初始值自動推導出類型。但是不能用于函數傳參以及數組類型的推導nullptr關鍵字&#xff1a;nullptr是一種特殊類型的字面值&#xff0c;它可以被轉換成任意其它的指針類型&#xff1b;而NULL一般被宏定義…

C語言 返回指針的函數--指針函數 int* max(int a)

定義 strlong示例代碼 代碼1: #include<stdio.h> #include<string.h> //返回指針的函數//比較兩個字符串,返回更長的字符串 char *strlong(char* a,char* b) {char *p1&a[0];char *p2&b[0];while(true){if(*p1\0){return b;}else if(*p2\0){return a;}p1…

第2、3講 圖像的存儲格式

本圖像處理系列筆記是基于B站楊淑瑩老師的課程進行學習整理的。 文章目錄黑白圖像8位灰度索引圖像8位偽彩色索引圖像24位真彩色圖像圖像文件格式BMP文件存儲格式BMP文件頭位圖信息頭顏色表位圖信息——BITMAPINFO結構BMP位圖文件匯總按照顏色深度分類&#xff0c;常用圖像文件&…

Ubuntu18.04.4 環境下對屬性加密算法CP-ABE環境搭建

注意事項 cpabe依賴pbc&#xff0c;pbc依賴gmp&#xff0c;gmp依賴M4、bison、flex如果權限不夠 &#xff0c;命令的前面加上sudo &#xff0c;不要直接使用root用戶進行操作&#xff0c;其帶來的隱患有很多 第一步 配置簡單的環境 簡單環境 包括gcc、g、make、cmake、openss…

C語言 函數指針 int(*ptr)(int,int)

基本介紹 函數指針:指向函數的指針 與數組類似 定義 Int(*pmax)(int ,int)max; Int(*pmax)(int x,int y)max;//形參名稱不重要 函數返回類型(*指針)(形參類型)函數名稱; 具體案例 代碼: *pmax取到函數本身 調用函數指針方式: (*pmax)(x,y); pmax(x,y);//與java中調用函數一…

C++ primer 第14章 操作重載與類型轉換

文章目錄基本概念直接調用一個重載的運算符函數某些運算符不應該被重載使用與內置類型一致的含義選擇作為成員或者非成員輸入和輸出運算符重載輸出運算符<<輸出運算符盡量減少格式化操作輸入輸出運算符必須是非成員函數重載輸入運算符>>算術和關系運算符相等運算符…

C語言 回調函數 produce(arr,len,getRand)

基本介紹 回調函數:形參中包含另一個函數的函數指針 用函數指針接收另一個函數 案例 代碼解析 具體代碼 #include<stdio.h> #include<stdlib.h> //回調函數--//函數原型 int getRand(); int *produce(int*arr,int len,int(*get)()); int main() {int arr[10…

從零開始配置服務器密碼機的開發環境

開發環境環境配置安裝gcc編譯器安裝g編譯器安裝make安裝cmake安裝ssh安裝git和配置安裝大文件管理工具git-lfs安裝數據庫sqlite3安裝數據庫sqlite_orm文件安裝Openssl安裝Tcl和Tk安裝tcl-expect-dev安裝boost安裝clang-format安裝Clion注意事項安裝automake和libudev-dev環境配…

C語言 動態內存分配機制(堆區) int*p=malloc(5*sizeof(4))

C程序內存分配圖 棧區:局部變量 堆區:動態分配的數據 靜態存儲區/全局區:全局變量,靜態數據 代碼區:代碼,指令 內存分配說明 內存動態分配的相關函數 堆區: #inlcude<stdlib.h> Malloc(size);//分配長度為size個字節的連續空間 Calloc(n,size);//分配size個長度為n…

C++ primer 第15章 面向對象程序設計

文章目錄前言OOP&#xff1a;概述繼承動態綁定定義基類和派生類定義基類成員函數與繼承訪問控制與繼承定義派生類派生類中的虛函數派生類對象及派生類向基類的類型轉換派生類構造函數派生類使用基類的成員繼承與靜態成員派生類的聲明被用作基類的類防止繼承的發生類型轉換與繼承…

服務器密碼機部分文件的介紹學習

相關文件包 automake,autoconf使用詳解

C語言 結構體 struct Cat cat1;

引入 使用傳統技術解決 需要定義多個變量或數組 結構體與結構體變量的關系示意圖 類似Java類中的對象(結構體)與屬性(結構體變量) 一切物體都可以看作對象(結構體) 補充:C語言數據類型 簡單使用案例 代碼 Cat是我們自己定義的數據類型 struct Cat cat1;//創建struct Cat的…

boost Filesystem Library Version 3關于文件的一些函數封裝 fsync()函數

boost boost Filesystem Library Version 3boost::filesystem使用方法,根據路徑創建文件夾使用boost.filesystem檢查文件是否存在的正確方式std::filesystem::temp_directory_path關于C#:與boost :: filesystem :: unique_path()等效的C 17是什么?C++ 檔案、資料夾、路徑處理…

c++面向對象高級編程 總目錄

本文是對學習侯捷視頻 c面向對象高級編程系列博客的目錄總索引。 c面向對象高級編程 學習一 不帶指針的類&#xff1a; 訪問私有成員變量的方式&#xff0c;內聯inline&#xff0c;常量成員函數&#xff0c;構造函數&#xff0c;值傳遞&#xff0c;引用傳遞&#xff0c;操作符…

C語言 共用體/聯合體 union

引入 傳統技術的缺陷—結構體 共用體基本介紹 共用體與結構體一樣都是值傳遞 定義共用體的三種方式 內存布局 共用體數據空間占用最大的成員的數據空間大小 案例解析 1) 2) 3) 4) 注: 1010 1101 0101 0100所對應的十進制是負數 計算機中的二進制都是以補碼存儲的,所…

C++ Makefile文件詳解

什么是Makefile文件 一個工程&#xff0c;源文件不計其數&#xff0c;按照類型、功能、模塊分別放在對應的若干個目錄中Makefile定義了一系列的規則&#xff0c;比如定義文件編譯的先后順序。類似shell腳本&#xff0c;也可以執行操作系統的命令Makefile帶來的好處是自動化編譯…