是否可以执行与下面相同的操作,但不使用[]
或->
。
我不明白为什么.*(points + 2)
无效。不应该替换阵列吗?
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int points[2];
}_student;
int foo(_student *stud);
int main()
{
int second;
_student students[2];
students[1].points[1] = 100;
second = foo(students);
printf("%d", second);
return 0;
}
int foo(_student *stud) // returns 3rd member of the array within a struct
{
int second;
second = (*(stud+1)).points[1]; // Works
//second = (*(stud+1)).*(points+1); ----> Does not work!
return second;
}
结果应为100。
答案 0 :(得分:3)
你没有说你的代码失败了什么,但不管它是什么,都是因为缓冲区溢出。
下面
_student students[2];
students[2].points[2] = 100;
你不能访问students[2]
,因为它是第三个元素,你的数组只有两个,访问第三个元素会调用未定义的行为,当然points
也是如此。
在c中,数组索引从0
开始,而不是1
,因此第二个元素将是
_student students[2];
students[1].points[1] = 100;
同样不要对类型名称使用那种标识符,这是非常令人困惑的,并且通常最好在某些东西是结构时说清楚,就像在这种情况下一样。
我会推荐以下
struct student {
int points[2];
};
struct student students[2];
students[1].points[1] = 100;
编辑:由于现在编辑的问题上面的内容似乎不合逻辑或不正确,实际问题是这个语法
second = (*(stud+1)).*(points+1); /* ----> Does not work for sure ! */
无效,显而易见的方法是
second = *((*(stud + 1)).points + 1); /* ----> Does work! */
甚至
second = *((stud + 1)->points + 1); /* ----> Does work! */
我不明白为什么
.*(points + 2)
不起作用。这不应该取代阵列吗?
一个好问题是,为什么你认为它应该有效?