当前位置:  开发笔记 > 编程语言 > 正文

C编程语言中的指针混淆

如何解决《C编程语言中的指针混淆》经验,为你挑选了1个好方法。

大家好,新年快乐!

我很难理解C语言中的指针.据我所知,指针是一个存储常规变量地址的特殊变量.

我正在发布两个相同的代码示例.在第一次我输入scanf中&d1.am.

在第二个示例中,如果我更改&d1.amptd1.am它会弹出编译错误,我无法理解为什么.

struct student{
    int am;
    char stname[20];
    char stsurname[20];
};

int main(){

struct student d1;
printf("1st student\n");
printf("Enter am\n");
scanf("%d", &d1.am)

第二个等效样本:

struct student{
    int am;
    char stname[20];
    char stsurname[20];
};

int main(){

struct student d1;
struct student *ptd1;
ptd1=&d1;
printf("1st student\n");
printf("Enter am\n");
scanf("%d", &(*ptd1).am);

我知道正确的是键入&(*ptd1).am但我无法理解为什么.如何&(*ptd1).am等于&d1.am和不等ptd1.am?我打字清楚了ptd1=&d1!

在此先感谢您的帮助!



1> haccks..:

.运算符的优先级高于一元&.&d1.am相当于&(d1.am)while ptd1.am等于(&d1).am,表示&d1.am!= (&d1).am.


让解剖`&(*ptd1).am` - 从parens开始`*ptd1`表示"dereference ptd1",即"ptd1指向的是什么"(在这种情况下为`d1`).然后`.`是下一个最高优先级运算符,所以现在我们有"d1"的"am"字段中的值.但是int的scanf需要int的地址,所以这就是为什么'&'是顺便说一句,大多数C程序员都会使用` - >`运算符作为快捷方式,因为`ptd1-> am ==(*ptd1).am` - 这意味着你最终会得到更漂亮的`&ptd1- > am`
推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有