C++中int *p[4]和 int (*q)[4]的區別

***************************************************

更多精彩,歡迎進入:http://shop115376623.taobao.com

***************************************************


C++中int *p[4]和 int (*q)[4]的區別

前者是指針數組,后者是指向數組的指針。更詳細地說。

前: 指針數組;是一個元素全為指針的數組.【數組中的元素為指針】
后: 數組指針;可以直接理解是指針,只是這個指針類型不是int也不是char,而是 int [4]類型的數組.(可以結合函數指針一并看看......)

int*p[4]------p是一個指針數組,每一個指向一個int型的
int (*q)[4]---------q是一個指針,指向int[4]的數組。

兩者在定義的時候如下:

int k;
cin>>k;

char *p[2];
p[0]=new char[k];
p[1]=new char[k];

char (*b)[2];
b=new char[k][2];


這樣空說是不是依舊小白?舉個例子

[cpp]?view plaincopy
  1. #include?<iostream>???
  2. using?namespace?std;???
  3. ??
  4. int?main()???
  5. {???
  6. ????int?*p[4];?//p是一個指針數組,每一個指針都指向一個int型數據???
  7. ????int?a=1,b=2,c=3,d=4;??
  8. ????int?i;??
  9. ????p[0]=&a;??
  10. ????p[1]=&b;??
  11. ????p[2]=&c;??
  12. ????p[3]=&d;??

  13. ????int?(*q)[4];//q是一個指針,指向int[4]數組???
  14. ????//q[0]=&a;//error???q是指向int[4]數組的指針,而&a是一個int型指針,所以不能賦值???
  15. ????int?aa[4]={5,6,7,8};??
  16. ????q=&aa;??
  17. ????cout?<<?"p的值:"?<<?p?<<?endl;?//注意,p不等于p[0]???
  18. ????cout?<<?"p[0]的值:"?<<?p[0]?<<?"??a的地址:"?<<?&a?<<?endl;??
  19. ??????
  20. ????cout?<<?"p[0]地址保存的值:"?<<?*(p[0])?<<?"??a的值:"?<<?a?<<?endl;??
  21. ????cout?<<?"p[1]地址保存的值:"?<<?*(p[1])?<<?"??b的值:"?<<?b?<<?endl;??
  22. ????cout?<<?"p[2]地址保存的值:"?<<?*(p[2])?<<?"??c的值:"?<<?c?<<?endl;??
  23. ????cout?<<?"p[3]地址保存的值:"?<<?*(p[3])?<<?"??d的值:"?<<?d?<<?endl;??
  24. ??????
  25. ??????
  26. ????cout?<<?"q的值:"?<<?q?<<?"??aa的地址:"?<<?&aa?<<?endl;??
  27. ??????
  28. ????cout?<<?"q[i]的地址:"?<<?endl;??
  29. ????for(i?=?0;?i?<?4;?++i)??
  30. ????cout?<<?q[i]?<<?endl;//q[0]?與?q的值相同???
  31. ??????
  32. ????cout?<<?"q指向int[4]的所有值:"?<<?endl;??
  33. ????for(i?=?0;?i?<?4;?i++)??
  34. ????cout?<<?q[0][i]?<<?'?';??
  35. ????cout?<<?endl;??
  36. ????//cout<<*(p[0])<<*(q[0])<<endl;??
  37. ????return?0;???
  38. }???



?運行結果:

p的值:0x22ff60
p[0]的值:0x22ff5c? a的地址:0x22ff5c
p[0]地址保存的值:1? a的值:1
p[1]地址保存的值:2? b的值:2
p[2]地址保存的值:3? c的值:3
p[3]地址保存的值:4? d的值:4
q的值:0x22ff30? aa的地址:0x22ff30
q[i]的地址:
0x22ff30
0x22ff40
0x22ff50
0x22ff60
q指向int[4]的所有值:
5 6 7 8

?

以下為網友的解釋,可能闡述得更為細致。

?

?優先級: ?[]? >?*

定義涉及兩個運算符:“*”(間接引用)、“[]”(下標),“[]”的優先級別大于“*”的優先級別。

??首先看int *p[4],“[]”的優先級別高,所以它首先是個大小為4的數組,即p[4];剩下的“int *”作為補充說明,即說明該數組的每一個元素為指向一個整型類型的指針。int *p[4]的存儲結構如下:(存儲方格橫向排列或豎向排列沒區別,只要按內存地址順序排列就行,此處只是為畫圖方便)



????再看int (*q)[4]。它首先是個指針,即*q,剩下的“int [4]”作為補充說明,即說明指針q指向一個長度為4的數組。int (*q)[4]的存儲結構如下:

請看以下定義:

int a[2][4]={{2,5,6,8},{22,55,66,88}};

int c[4]={5,8,9,4};

int d[3]={23,12,443};

int *p[4],(*q)[4];

q=a;

*p=c;

*(p+1)=d;

則int *p[4]和int (*q)[4]的存儲數據為:

驗證:

?

?

?

?

#include <stdio.h>

int main(void)

{

????int a[2][4]={{2,5,6,8},{22,55,66,88}};

????int c[4]={5,8,9,4};

????int d[3]={23,12,443};

????int *p[4],(*q)[4];

????q=a;

????*p=c;

????*(p+1)=d;

????int i,j;

????for(i=0;i<2;i++)

????????for(j=0;j<4;j++)

???????{

???????????if((i==1)&&(j==3)) break;

???????????printf("*(*(p+%d)+%d)=%d\n",i,j,*(*(p+i)+j));

???????}

????puts("===============");

????for(i=0;i<2;i++)

???????for(j=0;j<4;j++)

???????????printf("*(*(q+%d)+%d)=%d\n",i,j,*(*(q+i)+j));

???return 0;

}

?

輸出結果為:

*(*(p+0)+0)=5

*(*(p+0)+1)=8

*(*(p+0)+2)=9

*(*(p+0)+3)=4

*(*(p+1)+0)=23

*(*(p+1)+1)=12

*(*(p+1)+2)=443

===============

*(*(q+0)+0)=2

*(*(q+0)+1)=5

*(*(q+0)+2)=6

*(*(q+0)+3)=8

*(*(q+1)+0)=22

*(*(q+1)+1)=55

*(*(q+1)+2)=66

*(*(q+1)+3)=88

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

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

相關文章

Spring筆記③--spring的命名空間

p:命名空間: xmlns:p"http://www.springframework.org/schema/p" 作用:簡化在xml配置bean的屬性 在<bean>中使用p:屬性名來配置 AOP:命名空間: xmlns:aop"http://www.springframework.org/schema/aop" xsi:schemaLocation: http://www.springframewo…

linux不用命令開啟ssh,不用密碼也能ssh登陸Linux?

Linux的一個后門引發對PAM的探究1.1 起因今天在搜索關于Linux下的后門姿勢時&#xff0c;發現一條命令如下&#xff1a;ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort5555;經典后門。直接對sshd建立軟連接&#xff0c;之后用任意密碼登錄即可。ssh rootx.x.x.x -p 5555這個是…

ScrollView常用(暫時用上了的)代理方法

2019獨角獸企業重金招聘Python工程師標準>>> ScrollView常用代理方法: #pragma mark - 滾動結束調用 -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {// 計算 滑動到了第幾頁double page scrollView.contentOffset.x / scrollView.width;self.p…

筆試題目匯總

C常考筆試題:不用if,while,do-while,for,打印出所有大于0小于k的整數.函數原型void printLess(int k); 解法一:遞歸方式(剛想出來) [cpp] view plaincopy #include <iostream> using namespace std; void printLess(int k) { switch(--k) { case 0:…

Android ListView性能優化實例講解

前言&#xff1a; 對于ListView&#xff0c;大家絕對都不會陌生&#xff0c;只要是做過Android開發的人&#xff0c;哪有不用ListView的呢&#xff1f; 只要是用過ListView的人&#xff0c;哪有不關心對它性能優化的呢&#xff1f; 關于如何對ListView進行性能優化&#xff0c;…

Bzoj 3289: Mato的文件管理 莫隊,樹狀數組,逆序對,離散化,分塊

3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 1539 Solved: 665[Submit][Status][Discuss]Description Mato同學從各路神犇以各種方式&#xff08;你們懂的&#xff09;收集了許多資料&#xff0c;這些資料一共有n份&#xff0c;每份有一個大小和一…

linux頭文件 庫,Linux操作系統的頭文件和庫文件搜索路徑

一、 頭文件1 “”中的頭文件&#xff0c;在源文件當前目錄查找2 -I 中指定目錄 -I可以在CFLAG中指定3 gcc的環境變量 C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH4 編譯器預設路徑、內定目錄&#xff1a;/usr/include/usr/local/include/usr/lib/gcc-lib/i386-lin…

vs2010創建和使用動態鏈接庫(dll)

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 本文將創建一個簡單的動態鏈接庫&#xff0c;并編寫一個應用臺控制程序使用該動態鏈接…

通用二進制

通用二進制 通用二進制&#xff08;Universal binary&#xff09;是蘋果電腦公司提出的一種程序代碼&#xff0c;使程序能以本地程序的形式運行在使用PowerPC或者英特爾微處理器&#xff08;x86&#xff09;的麥金塔電腦上&#xff0c;在同一個程序包中同時為兩種架構提供最理想…

Python~win32com~Excel

import win32com.client#wwin32com.client.Dispatch("Word.Application") #w.Visible1owin32com.client.Dispatch("Excel.Application") o.Visible1 o.Workbooks.Add() o.Cells(1,1).Value"Hello"轉載于:https://www.cnblogs.com/lynclynn/p/530…

linux顯示光盤命令行,使用wodim在命令行下燒錄光盤

使用wodim在命令行下燒錄光盤發布時間:2009-02-27 16:23:11來源:紅聯作者:zhania作者&#xff1a;linuxtoy出自http://linuxtoy.org/archives/burning-cd-with-wodim.html我們以前介紹的 Linux 光盤燒錄工具多為圖形化的程序&#xff0c;今天來看看如何使用 wodim 在命令行下燒…

Android(java)學習筆記144:網絡圖片瀏覽器的實現(ANR)

1.我們在Android下&#xff0c;實現使用http協議進行網絡通信&#xff0c;請求網絡數據。這里是獲取網絡上的圖片信息&#xff0c;讓它可以顯示在手機上&#xff1b; 但是我們這個手機連接網絡是很費時間&#xff0c;如果我們在主線程&#xff08;UI線程&#xff09;中寫這個網…

DLL導出函數名稱改編的解決方法

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 1.DLL編譯后導出函數名稱改變 在編寫一個DLL后&#xff0c;為了能被別的程序調用&…

組合自定義控件的步驟詳解

Android 步驟&#xff1a; 1 自定義組合控件的布局settint_view.xml<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"vertical"and…

linux如何建立隱藏目錄,【Linux】文件與目錄的默認權限與隱藏權限

01. 文件默認權限&#xff1a;umask文件的權限可以使用chmod來改變&#xff0c;但是我們默認創建文件的權限是什么&#xff1f;那就是與umask這個有關了。下來我們學習這個指令1.1 簡單使用umask[rootiZbp13q6hd8z3xaagcmz6gZ /]# umask0022[rootiZbp13q6hd8z3xaagcmz6gZ /]# u…

Servlet和JSP學習指導與實踐(二):Session追蹤

前言&#xff1a; web應用中經常需要對某些有用的信息進行存儲或者附加一些信息。本文主要介紹session&#xff0c;即“會話”跟蹤的幾種不同方式~ ----------------------------4種管理session的方式&#xff1a; 1.重寫url 通過在請求的url后面追加參數信息進行會話跟蹤。如&…

數據存儲和界面展示(二)

#測試 黑盒測試 測試邏輯業務 白盒測試 測試邏輯方法 根據測試粒度 方法測試&#xff1a;function test 單元測試&#xff1a;unit test 集成測試&#xff1a;integration test 系統測試&#xff1a;system test 根據測試暴力程度 冒煙測試&#xff1a;smoke test 壓力測…

linux在A目錄下創建B文件,Linux課程---5、常用文件命令和目錄命令(創建文件命令)...

Linux課程---5、常用文件命令和目錄命令(創建文件命令)一、總結一句話總結&#xff1a;touch file11、管道符|有什么用&#xff1f;將前一個命令的結果作為后一個命令的輸入&#xff1a;比如查看文件前3行&#xff1a;cat file1 | head -32、linux下如何復制粘貼命令是什么&…

window 系統上傳文件到linux 系統出現dos 格式換行符

Windows里的文件在Unix/Mac下打開的話&#xff0c;在每行的結尾可能會多出一個^M符號&#xff0c;Unix/Mac系統下的文件在Windows里打開的話&#xff0c;所有文字會變成一行&#xff0c;所以為了避免這種情況的發生&#xff0c;我們可以在linux系統內轉換格式 Centos系列可以直…

#pragma once與 #ifndef的區別

*************************************************** 更多精彩&#xff0c;歡迎進入&#xff1a;http://shop115376623.taobao.com *************************************************** 為了避免同一個文件被include多次 1 #ifndef方式2 #pragma once方式 在能夠支持這…