c语言问题ptr不是获得malloc指向空间的指针么,为什么答案上写底下scanf输入还是要加&呢?ptr[]本身不就是地址么,不明白,有没有兄弟解释一下
ptr如果是malloc申请的空间指针的话,如果时字符串形式读取数据时不需要加&
但是如果读取单个数据的时候,就需要加&,比如scanf("%c",&ptr[1])
ptr是数组首地址,跟&ptr[0]是一样的,ptr[0]是数组的第一个元素,&ptr[0]是数组第一个元素的地址(也是数组首地址)
ptr是数组的首地址,但是需要看它的类型和具体怎么用。
例子如下:
//char类型
char* ptr = (char*)malloc(100);
scanf("%s", ptr); //直接读取整个字符串,ptr前不需要加&
for(int i=0;i<10;i++)
scanf("%c", &ptr[i]);//读取单个字符时,需要加&
//int类型
int* ptr2 = (int*)malloc(10 * sizeof(int));
for (int i = 0; i < 10; i++)
scanf("%d", &ptr2[i]);//读取单个数字时,需要加&
ptr是指向数组的指针, 你说的 "ptr[]本身不就是地址么" 并不准确 应该是 ptr本身是地址,是这个数组的首地址也就是第一个元素的起始地址, 所以 你会发现 *ptr 和ptr[0] 是等价的, scanf里面需要加&是因为 []取的是具体的数组中某个元素 ptr[i] 就是ptr数组中第i个元素的值 而不是 第i个元素的内存地址, ptr[i]实际上就是一个char类型的变量,所以scanf里需要加上&,取得ptr[i]这个变量的地址。 如果不加& 的话 需要将ptr[i] 改写成 (ptr + i) 这样子就不需要加&,因为ptr+i 的结果就是 一个地址 是从首地址ptr开始向后偏移i个元素的地址,所以可以不用再加&。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!ptr[] 是内存中存储单元存储的值,即二进制内容,&是获取存储该内容的存储单元的内存地址。
望采纳。