Благодаря Сержу, я смог собрать свой код, который приведен ниже.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// create a struct, call it pupils
typedef struct
{
char *name;
char *dorm;
}
pupils;
int main(void)
{
// Allocate space for students - generally dynamic, here static
int enrollment = 2;
// create variable 'idinfo', which contains (enrollment) number of structs of type pupils
pupils idinfo[enrollment];
// Prompt for students' names and dorms
for (int i = 0; i < enrollment; i++)
{
// allocate memory for idinfo[i] pointers:
idinfo[i].name = malloc(20);
idinfo[i].dorm = malloc(20);
printf("Enter student %d's Name ", i+1);
scanf("%19s", idinfo[i].name);
printf("Enter student %d's dorm ", i+1);
scanf("%19s", idinfo[i].dorm);
}
// Print students' names and dorms
for (int i = 0; i < enrollment; i++)
{
printf("%s is in %s.\n", idinfo[i].name, idinfo[i].dorm);
}
// free allocated memory
for (int i = 0; i < enrollment; i++)
{
free(idinfo[i].name);
free(idinfo[i].dorm);
}
}
как
вернет объект типа, который вы запрашивается, если операнд совместим. Если это не так, он вернет ноль
. Если вы используете в качестве
и возможно, что приведение не удастся, вам нужно проверить, чтобы убедиться, что ссылка действительна.
Например, если depObj был типа String
, он не будет нулевым
, но он также не сможет быть преобразован ни в один из запрошенных типов, и обе эти переменные станут нулевыми
.
как и «приведение, если оно есть», и эквивалентно:
(X - ТИП)? (TYPE) X: null
, однако, он более эффективен, чем , является
+ cast
.
depObj может реализовывать любой интерфейс, ни одного, или оба.
IsValid = _fe != null || _fce != null;
и
IsValid = depObj != null;
не являются одинаковыми тестами, потому что, если depObj не относится к типу FrameworkElement или FrameworkContentElement, но не имеет значение null, второй тест вернет true, а первый вернет false.
Что если depObj
не является ни FrameworkElement
, ни FrameworkContentElement
? Я не знаю полного сценария (то есть, какие типы могут быть), но это кажется разумной защитной стратегией.
Что, если DependencyObject depObj
действительно был FrameworkOtherTypeOfElement
Тогда depObj
не будет нулевым
, но попытка as
Приведения приведут к нулевому значению, а _fe
& _fce
будут равны нулю
, так как
эквивалентно выполнению
if(I Can Cast This Object)
//Then cast it
else
//Return null
Во-первых, ключевое слово as
включает в себя проверку is
.
if( o is A)
a = (A) o;
совпадает с
a = o as A;
Second, как
] не преобразует тип, как это делает приведение, даже если определен оператор преобразования из типа A
в B
.