c指针基础,进!~

来源:百度知道 编辑:UC知道 时间:2024/05/23 20:46:23
main()
{ int a=1,b=3,c=5;
int *p1=&a,*p2=&b,*p=&c;
*p=*p1*(*p2);
printf("%d\n",c);
}

我想问的是,*p1=&a,*p2=&b,这句话,

是把a的首地址存入p1所指的内存单元,
把b的首地址存入p2所指的内存单元撒?

但是,*p1*(*p2)那就就成了首地址乘以首地址啊,
然后把所得的值存入p所指向的内存单元啊?

那首地址乘以首地址,那是多少啊??

(我个人认为,要是*p1=a,*p2=b的话,那*p1*(*p2)我就好理解了)
我应该理解错了,那我该怎么理解呢?大家帮我理解看看!~~
按一楼大哥的说法,是不是*p1=&a,*p2=&b和*p1=a,*p2=b是一个意思呢??

指针在定义的时候需要加星号
比如
int a = 2;
int *p = &a;

但是使用的时候
p 表示所指向的地址,*p表示这个地址上的内容

你理解的错误在于:
int *p = &a;

不表示 ”把a的首地址存入p所指的内存单元“
p刚开始并没有指向任何内存单元
这句话就是让p指向a的地址

也就是说你没有吧p 自己所占用的内存单元跟p所指向的内容单元区分开

你可以这这样看

p是一个变量
变量的类型是 (int *)
它的值一个地址值

int *p1=&a,*p2=&b,*p=&c;
p1,p2,p都是指针变量。既指向变量地址.此语句后
把a的地址,赋值给p1,即p1指向a的地址
把b的地址,赋值给p2,即p2指向b的地址
把c的地址,赋值给p,即p指向c的地址

如a b c 是数组,a[3],b[3]..那么才是把b的首地址,赋值给p2,

(我个人认为,要是*p1=a,*p2=b的话,那*p1*(*p2)我就好理解了) int *p1=&a,*p2=&b,*p=&c; 是宝义和赋值写在一起了,C 语言是充许的。所以你这理解是对的。

main()
{ int a=1,b=3,c=5;
int *p1=&a;/*这里可以写成int* p1=&a把空格左边看成一个整体看看,这里的*才是定义p1为指针的符号,没有取内容符号的意思*/
int *p2=&b,*p=&c;
*p=*p1*(*p2); /*在*p中的*是取内容符号(好像这么叫)引用p地址中的内容,要分别开来*/
printf("%d\n",c);
}

*p1=&a,*p2=&b,这句话,

并不是
把a的首地址存入p1所指的内存单元,
把b的首地址存入p2所指的内存单元

而是
把a的首地址