当我尝试编译以下程序时,它在屏幕上没有输出:
#include<stdio.h>
int main ()
{
struct d1
{
char arr [10];
int num;
};
struct d2
{
struct d1 name;
int age;
}p1;
p1.name={("JANE",8)};
printf ("%s",&p1.name.arr[0]);
}
我认为问题是由于第p1.name={("JANE",8)};
行引起的
但是我想我写的都没错。通过写这行代码,我尝试为成员"name"
的变量p1
具有结构类型d2
的成员赋值。并且由于name
本身是具有两个成员的d1
类型的结构,因此我为JANE
和8
分配了两个值arr [10]
和num
name
的成员。
我什至尝试过
p1.name={{"JANE",8}}; //For this it gives error
p1.name={("JANE",8),20}; //For this it compiles but no output
p1.name={{"JANE",8},20}; //again error
该20
是p1's
成员"age"
的值。尝试打印值p1.name.age
时,它给出的是0
而不是20
。
怎么了?是否存在语法错误或概念错误?
答案 0 :(得分:3)
import org.apache.spark.sql.{DataFrame, Column}
import org.apache.spark.sql.functions._
val arrayHead = udf((sequence: Seq[String]) => sequence.head)
val arrayTail = udf((sequence: Seq[String]) => sequence.tail)
// re-produces the ArrayType column recursively
val rewriteArrayCol = (c: Column) => {
def helper(elementsRemaining: Column, outputAccum: Column): Column = {
when(size(elementsRemaining) === lit(0), outputAccum)
.otherwise(helper(arrayTail(elementsRemaining), concat(outputAccum, array(arrayHead(elementsRemaining)))))
}
helper(c, array())
}
// Test
val df =
Seq("100" -> Seq("a", "b", "b", "b", "b", "b", "c", "c", "d"))
.toDF("id", "sequence")
// .withColumn("test_tail", arrayTail($"sequence")) //head & tail udfs work
// .withColumn("test", rewriteArrayCol($"sequence")) //stackoverflow if uncommented
display(df)
答案 1 :(得分:2)
如果是初始化,请直接执行:
#include<stdio.h>
int main ()
{
struct d1
{
char arr [10];
int num;
};
struct d2
{
struct d1 name;
int age;
}p1 = {{"JANE",8}, 20};
printf ("%s",&p1.name.arr[0]);
}
p1.name.num
为8,p1.age
为20
注释&p1.name.arr[0]
可以为p1.name.arr