c语言指针为什么是取址之后在取值
时间: 2023-05-25 22:06:57 浏览: 166
C语言中指针是一种特殊的变量类型,它存储了一个变量的地址。在C语言中,取地址符&用于获取变量的地址,而指针解引用符*用于获取指针指向的变量的值。
因此,在使用指针时,首先需要通过取地址符&获取变量的地址,然后将该地址赋值给指针变量。之后,可以使用指针解引用符*获取指针指向的变量的值。
取址之后再取值的原因是,指针本身只存储了变量的地址,而不是存储变量的实际值。因此,需要通过指针解引用符*将指针指向的地址中存储的值获取出来。
相关问题
c语言指针变量为什么先取址之后在取值
指针变量先取址是为了让指针指向某个内存地址,即将该变量的地址存储在指针变量中。这样指针变量就能够指向该变量所在的内存地址,并且可以通过该指针变量来访问该内存地址中存储的数据。因此,在取值之前需要先将指针指向的内存地址所存储的数据获取到,然后才能使用该数据。
c语言结构体指针取值
好的,以下是用C语言的指向结构体指针,从键盘输入3名学生信息,包含学号、姓名、三门课程成绩的代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENTS 3
struct student {
int id;
char name[20];
float score[3];
};
int main() {
struct student *ptr;
int i;
ptr = (struct student*) malloc(MAX_STUDENTS * sizeof(struct student));
for (i = 0; i < MAX_STUDENTS; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("学号:");
scanf("%d", &(ptr+i)->id);
printf("姓名:");
scanf("%s", (ptr+i)->name);
printf("三门课程成绩:");
scanf("%f %f %f", &(ptr+i)->score[0], &(ptr+i)->score[1], &(ptr+i)->score[2]);
}
printf("\n学生信息如下:\n");
for (i = 0; i < MAX_STUDENTS; i++) {
printf("学号:%d\n", (ptr+i)->id);
printf("姓名:%s\n", (ptr+i)->name);
printf("三门课程成绩:%.2f %.2f %.2f\n", (ptr+i)->score[0], (ptr+i)->score[1], (ptr+i)->score[2]);
}
free(ptr);
return 0;
}
```
这段代码中,我们定义了一个结构体 `student`,包含学号、姓名和三门课程成绩。然后我们使用指向结构体的指针 `ptr`,动态分配了一个大小为 `MAX_STUDENTS` 的结构体数组。
接着,我们使用 `for` 循环,从键盘输入每个学生的信息,包括学号、姓名和三门课程成绩。注意,我们使用了指向结构体的指针 `ptr` 来访问每个学生的信息。
最后,我们使用 `for` 循环,输出每个学生的信息,包括学号、姓名和三门课程成绩。
最后,我们使用 `free` 函数释放了动态分配的内存。
希望这个示例能够帮助你理解如何使用指向结构体的指针从键盘输入学生信息。
阅读全文