标签:details char* cpp type 括号 == text eof 注意
指针变量定义基本模型:
type *p;
type a;
p 是一个指针变量,*前面的type 决定了通过p存储的地址怎样訪问内存。p能够存储a这样的变量的内存。
(1)假设type 为int。那么:
int *p;
int a;
p 存储a的地址。*p的时候。从所存储的地址開始訪问4个字节。依照int的数据组织方式。
(2)假设type 为char,那么:
char *p;
char a;
p 存储a的地址。*p的时候,从所存储的地址開始訪问1个字节,依照char的数据组织方式。
(3)假设type 为char*,那么:
char **P; //为了更好理解 ,能够加个括号 (char*) *p;
char *a; // (int*) a;
p 存储a的地址。*p的时候,从p存储的地址開始訪问4个字节,这四个字节存储的是地址。
(4)假设type 为char**,那么:
char** *p;
char** a;
p 存储a的地址,*p的时候,从p存储的地址開始訪问4个字节,这四个字节存储的是地址。
#include <stdio.h>
int main()
{
char c = ‘1‘;
char *p;
char **pp;
char ***ppp;
p = &c; //p 存储c的地址,通过p能找到c
pp = &p; //pp存储p的地址,通过pp能找到p,通过p能找到c
ppp = &pp; //ppp存储pp的地址。通过ppp找到pp,通过pp找到p,通过p找到c
printf("%p\n",ppp);
printf("%p\n",&pp);
printf("%p\n",pp);
printf("%p\n",&p);
printf("%p\n",p);
printf("%p\n",&c);
/*
*p = c;
*pp = p;
*ppp = pp
**pp = *(*pp) = *p = c;
**ppp = *(*ppp) = *(pp) = p;
***ppp = *(**pp) = *p = c;
*/
/*
注意1: **pp 运行是一层一层往下找的。先*pp找到p,然后*p 找到c;
可以运行的前提是 变量pp存储了变量p的地址,变量p存储了a的地址,否则就会段错误。
注意2:pp = &&a;这样的写法是错误的:
初学常范的错误是理解是p = &a,那么&a得到的是p:
这是错误的,&a得到是数据,数据存储在变量p中,也可以存储在p1中。
仅仅能对内存取地址。反应在代码上是对变量取地址。而不能对数据取地址。
&a 是数据。不能对数据取地址。
*/
return 0;
}标签:details char* cpp type 括号 == text eof 注意
原文地址:http://www.cnblogs.com/lytwajue/p/7040176.html