用scanf给指针赋值需要加地址符吗
时间: 2023-12-12 16:06:00 浏览: 76
是的,使用scanf给指针赋值时需要加上地址符(&)。因为scanf函数的参数需要传递变量的地址,而指针变量本身存储的是地址,所以需要使用地址符获取指针变量本身的地址。例如:
```
int num;
scanf("%d", &num); // 对于普通变量num,需要加上地址符&获取其地址
int *p;
scanf("%d", p); // 对于指针变量p,需要加上地址符&获取其地址所对应的值,即p所指向的变量的地址
```
相关问题
用scanf给指针数组赋值
在C语言中,可以使用`scanf`函数给指针数组赋值。首先需要确保你有一个指针数组,然后使用`scanf`函数从标准输入读取数据,并将其存储在指针数组指向的位置。这里有一个简单的例子来演示这个过程:
```c
#include <stdio.h>
int main() {
// 假设我们有一个指针数组,用于存储整数
int *ptrArray[5];
// 循环读取5个整数并存储到数组中
for (int i = 0; i < 5; ++i) {
printf("请输入第%d个整数:", i + 1);
scanf("%d", ptrArray[i]); // 这里会发生错误,因为不能直接将整数的地址赋给int*
}
// 打印数组中的值
for (int i = 0; i < 5; ++i) {
printf("数组中的值:%d\n", *ptrArray[i]);
}
return 0;
}
```
上面的代码会导致编译错误,因为`ptrArray[i]`是`int*`类型,而`scanf`需要一个`int*`类型的参数,这里需要取地址操作。正确的做法是在`scanf`中对数组元素使用取地址符`&`:
```c
// 正确的循环读取数据
for (int i = 0; i < 5; ++i) {
printf("请输入第%d个整数:", i + 1);
scanf("%d", &ptrArray[i]); // 使用&来获取指针指向的地址
}
```
这样,`scanf`就可以正确地将输入的值存储在由指针数组指向的位置。记得在使用指针数组之前要动态分配内存或者确保数组有足够的空间来存储数据。
把一个指针赋值给另外一个指针
可以使用指针来实现字符串的复制和输出操作,具体步骤如下:
1. 定义两个字符指针变量,分别指向字符串a和字符串b。
2. 使用循环结构,将字符串a中的每个字符依次赋值给字符串b中对应的位置。
3. 最后输出字符串b即可。
示例代码如下:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char a[100], b[100];
char *p1, *p2;
int i;
printf("请输入字符串a:");
scanf("%s", a);
p1 = a;
p2 = b;
for (i = ; i < strlen(a); i++) {
*(p2 + i) = *(p1 + i);
}
*(p2 + i) = '\'; // 在字符串末尾添加结束符
printf("复制后的字符串b为:%s\n", b);
return ;
}
```