- 4
- 0
- 约7.04万字
- 约 10页
- 2016-12-22 发布于贵州
- 举报
C指针的用法总结
char *p, **p, ***p;
char p[],p[][],p[][][];
char *p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][];
void (*pFun)(int i);
大神们看到这些东西脑袋里一定像蓝天白云一样清晰明了。。。
(1)关于指针与数组的存储
a、指针和数组在内存中的存储形式
数组p[N]创建时,对应着内存中一个数组空间的分配,其地址和容量在数组生命周期内一般不可改变。数组名p本身是一个常量,即分配数组空间的地址值,这个值在编译时会替换成一个常数,在运行时没有任何内存空间来存储这个值,它和数组长度一起存在于代码中(应该是符号表中),在链接时已经制定好了;而指针*p创建时,对应内存中这个指针变量的空间分配,至于这个空间内填什么值即这个指针变量的值是多少,要看它在程序中被如何初始化,这也决定了指针指向哪一块内存地址。
b、指针和数组的赋值与初始化
根据上文,一般情况下,数组的地址不能修改,内容可以修改;而指针的内容可以修改,指针指向的内容也可以修改,但这之前要为指针初始化。
如:
int p[5];
p=p+1; 是不允许的
而p[0]=1; 是可以的;
//
int *p;
p=p+1; 是允许的
p[0]=1; 是不允许的,因为指针没有初始化;
//
int i;
int *p=i;
p[0]=1; 是允许的;
对于字符指针还有比较特殊的情况。
如:
char * p=abc;
p[0]=d; 是不允许的
为什么初始化了的字符指针不能改变其指向的内容呢?这是因为p指向的是“常量”字符串,字符串abc实际是存储在程序的静态存储区的,因此内容不能改变。这里常量字符串的地址确定在先,将指针指向其在后。
而
char p[]=abc;
p[0]=d; 是允许的
这是因为,这个初始化实际上是把常量直接赋值给数组,即写到为数组分配的内存空间。这里数组内存分配在先,赋值在后。
(2)关于一些表达式的含义
char *p, **p, ***p;
char p[],p[][],p[][][];
char *p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][];
能清晰地知道以上表达式的含义吗?(知道的去死!)
第一组:char *p, **p, ***p;
分别为char指针;char*指针,即指向char*类型数据地址的指针;char**指针,即指向char**类型数据的指针;他们都是占4字节空间的指针。
如:
char c=a;
char *p=c;
char **p1=p;
char ***p2=p1;
cout***p2endl;
第二组:char p[],p[][],p[][][];
分别为一维,二维和三维char型数组,即数组,数组的数组,数组的数组的数组。可以如下的方式进行初始化:
char pp[3]=ab;
char pp1[3][3]={ab};
char pp2[3][3][3]={{ab}};
现在我们尝试使用第二组三个数组名对应为第一组三个指针赋值,直接赋值的结果如下:
p=pp; //正确
p1=pp1; //错误
p2=pp2; //错误
为什么p1和p2的赋值会出错呢?原因是数组名为给指针赋值的规则不是递归的,即数组的数组可以为数组的指针赋值,而不可以为指针的指针赋值。这里先了解到这个抽象的规则,下面讲完第三组表达式,等我们知道数组的指针和指针的数组如何书写后再对这一问题举例说明。
第三组:char *p[],*p[][],**p[],**p[][],*(*p)[],(**p)[],(**p)[][];
这一类表达式的解析方法如下:
首先把整个表达式分为三部分,
数据类型和星号部分+p或括号内内容部分+中括号部分
如:char *(*p)[]分为?char* ,(*p) 和 []
? ?“char*”表示最内层存储的数据类型“(*p)”表示最外层指针“[]”表示中间层数组(维数=中括号数目),因此上式表示一个一维数组的指针p,数组中的元素的数据类型是指针char*。同理,char
您可能关注的文档
- AMT传统企业互联网转型咨询服务体系.docx
- Applet Xul (组件) (小程序) - 教育部科学技术司.doc
- Apache Derby 进行 Java 数据库开发.doc
- AR71XX 脱机下载教程.doc
- AD 采集程序(好).docx
- ARM理工学院试卷 参考答案.doc
- AVAYA常用命令集.doc
- AMESim.Rev.11详细安装步骤—王权.doc
- B2B商贸信息系统.doc
- Arduino 入门到精通 例程3-PWM调光.doc
- 伟明环保-市场前景及投资研究报告-境内业务稳健运行,印尼市场贡献边际增量.pdf
- 桂东县法院系统招聘考试真题2025.pdf
- 贵州省黔南布依族2026年中考三模物理试题及答案.pdf
- 贵州省黔南州2026年中考语文二模试卷附答案.pdf
- 贵州省铜仁市2026年中考语文二模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套完整答案详解.docx
- 贵州省毕节市2026年中考语文一模试卷附答案.pdf
- 贵州省贵阳市南明区2026年中考语文一模试卷附答案.pdf
- 2026上半年安徽事业单位联考合肥市庐江县招聘36人备考题库及一套参考答案详解.docx
- 贵州省贵阳市白云区2026年中考二模物理试题附答案.pdf
最近下载
- 长春理工大学2024-2025学年第1学期《高等数学(上)》期末考试试卷(B卷)附参考答案.pdf
- 教科版一年级下册科学教学计划.docx VIP
- 早产儿脑室内出血预防专家共识(2025).pptx VIP
- 如何找回误删微信好友,微信好友一键恢复.doc VIP
- 2019年河南专升本考试公共英语(真题).pdf VIP
- 2025年房地产经纪人经纪人职业道德失范投诉处理专题试卷及解析.pdf VIP
- 2025年碳排放管理师林业碳汇区块链技术应用专题试卷及解析.pdf VIP
- 2025年拍卖师机动车拍卖成交价款支付与结算风险控制专题试卷及解析.pdf VIP
- 2025年AWS认证SQS消息多线程处理专题试卷及解析.pdf VIP
- 2025年房地产经纪人个人以不动产投资入股个税处理专题试卷及解析.pdf VIP
原创力文档

文档评论(0)