当前位置:编程学习 > C/C++ >>

C语言指针的一些疑问

1.指针变量所占的地址是由系统系统分配的吗?

2.(当指向数组元素的指针变量p等于数组名字时),p+i与a+i都指向数组元素的第i个元素

打括号的里的话不明白             p=&a[0]这个例子对吗            如果对的话举个不对的我看一下

补充:int **prt

定义这种形式的指针通常干啥用

追问:比如说            ch[10]={1,2,3,4,5,6,7,8,9}           然后printf(。。。。。。。ch,*ch)比如说ch数组的首地址是1000那么ch            和*ch    数值相同吗 如果相同*ch又表示啥     

答案:楼主是对的,但是一般情况下 

*p表示地址,也就是*p=1000,表示p是1000内存里面的值

而a[0]也是表示1000里面的值(a[0]存在1000内存里)

也就是*p=a[0]

 

int **prt一般运用的是二维数组,*prt表示行或列,*(*prt)表示列或行

 

 

 

 

 

char p是声明一个字符类型变量p,char * p1是声明一个字符类型的指针变量p1,那么char ** p2就相当与给char类型的指针变量再声明一个指针.(2级指针)

举个例子,假如:
char p='a';//假设声明了p后,p在内存的1000处,则&p=1000(&为取变量首地址)
char * p1=&p;//则p1=1000,*p1=p='a',p1就和p关联了;假设p1被放在2000处
char ** p2=&p1;//则p2=2000,*p2=p1=&p=1000,**p2=&p1=p='a'

在说通俗点,你去超市买东西要先存包,存包的时候给你个手牌.这个时候变量p='a'就相当与你的包,它被放在1000号的箱子里,而你手里的号码牌写着"1000"就相当与p1,也就是p(你的包)的指针.....如果你的号码牌还要存到另外一个号为2000的箱子里,那这个2000的号码牌就成了第一个牌子的指针.

 

1.是系统分配的。比如int c=2; int * d =&c; d指向c的地址。存d的内存应是系统分配的。因为我们不用动的。我想变量之类的都是系统分配的

int * a=new int; c++ pr里的说明是系统会找到一个存放int 字节的内存,并把地址返回给a

2.int a[3]={0,1,12}; int * p=a;//这里的意思是定义一个指针p 指向a这个数组的第一个元素。

这里a的数组名表示第一个元素的地址。&a=&a[0];   p=&a[0]这个例子是对的;

比如a+1=&a[1] 他的意思是 地址+1是表示。在内存里移动一个int字节大小的内存位置。本来若是a&[0]的地址那么移动一个int位那么就移动到&a[1]这里的位置。 所以 p+i与a+i都指向数组元素的第i个元素地址。

值就表示a[i]

 

int **prt

定义这种形式的指针通常干啥用

二次指针。比如

int a=4;

int *p=&a;

int **prt=p;这个prt存的是p的地址。p存的是a的地址

上一个:C语言跟C++有什么不同
下一个:JAVA与C语言最大的不同之处在哪里?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,