c - 无法通过指针 [C] 为结构的变量赋值
问题描述
我对 C 很陌生。我正在尝试创建一个简单的程序来使用结构来表示一个点。它看起来像这样:
// including standard libraries
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <assert.h>
// including user defined libraries
;
typedef struct point {
char p_name;
double *p_coords;
} point_t;
int main() {
point_t *pt;
pt->p_name = "A";
printf("%c", pt->p_name);
// returning 0 if there are no errors
return 0;
}
问题是,当我在为它分配名称“A”之后尝试打印点的名称时,程序除了退出代码(可能是一个随机数)之外什么都不输出:
Process finished with exit code -1073741819 (0xC0000005)
事实上,指针对我来说是一个很难理解的概念(我以前用 python 编程过),因此我可能遗漏了一些东西。我也尝试过使用其他变量类型,例如 int,但结果是相同的(即使退出状态号相同)。有没有办法解决这种行为?
PS:对不起,我的初级英语,我还在练习,非常感谢你的时间!
解决方案
在您的代码中
pt->p_name = "A";
错误有两个主要原因:
- 您从未
pt
指出任何有效的内存位置。尝试取消引用无效内存会调用未定义的行为。 p_name
是类型char
。"A"
是一个字符串字面量,类型为char [x]
,归结为char *
for 赋值,它们不是兼容的类型。
你需要
- 确保
pt
指向有效的内存位置。实际上,这里根本不需要指针。定义pt
为结构体类型的变量(不是指针变量),通过.
操作符访问成员。 - 用于
'A'
赋值,如字符常量,而不是字符串。
推荐阅读
- javascript - 如何使用 Promise 创建 Jest 模拟函数?
- linux - 如何从用户空间访问 thread_info
- vue.js - 如何在 vue data mustache 表达式中使用复杂变量作为对象键?
- c# - 如何从带有分隔符的txt文件中读取文件,并将其写回新的txt文件
- odoo-8 - Odoo重复many2many字段
- c# - ajax将一个int列表传递给asp net api控制器,参数为null
- eclipse - 如何制作开始测验的按钮?
- reactjs - 与 componentWilLReceiveProps 等效的挂钩以更新状态
- reactjs - React:当有多个字段要填充时如何设置状态
- reactjs - Typescript 条件渲染,Type 'undefined' is not Assignable to type CompanyStatsProps