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语言最大的不同之处在哪里?