Невозможно выбрать правильный элемент через CSS [duplicate]

Если вы действительно хотите сделать это, чтобы передать свой массив, я предлагаю реализовать структуру для хранения указателя на тип, который вам нужен, массив и целое число, представляющее размер массива. Затем вы можете передать это своим функциям. Просто присвойте значение переменной массива (указатель на первый элемент) этому указателю. Затем вы можете пойти Array.arr[i], чтобы получить i-й элемент, и использовать Array.size, чтобы получить количество элементов в массиве.

Я включил для вас некоторый код. Это не очень полезно, но вы можете расширить его с большим количеством функций. Если честно, если это то, что вам нужно, вы должны прекратить использовать C и использовать другой язык с этими встроенными функциями.

/* Absolutely no one should use this...
   By the time you're done implementing it you'll wish you just passed around
   an array and size to your functions */
/* This is a static implementation. You can get a dynamic implementation and 
   cut out the array in main by using the stdlib memory allocation methods,
   but it will work much slower since it will store your array on the heap */

#include <stdio.h>
#include <string.h>
/*
#include "MyTypeArray.h"
*/
/* MyTypeArray.h 
#ifndef MYTYPE_ARRAY
#define MYTYPE_ARRAY
*/
typedef struct MyType
{
   int age;
   char name[20];
} MyType;
typedef struct MyTypeArray
{
   int size;
   MyType *arr;
} MyTypeArray;

MyType new_MyType(int age, char *name);
MyTypeArray newMyTypeArray(int size, MyType *first);
/*
#endif
End MyTypeArray.h */

/* MyTypeArray.c */
MyType new_MyType(int age, char *name)
{
   MyType d;
   d.age = age;
   strcpy(d.name, name);
   return d;
}

MyTypeArray new_MyTypeArray(int size, MyType *first)
{
   MyTypeArray d;
   d.size = size;
   d.arr = first;
   return d;
}
/* End MyTypeArray.c */


void print_MyType_names(MyTypeArray d)
{
   int i;
   for (i = 0; i < d.size; i++)
   {
      printf("Name: %s, Age: %d\n", d.arr[i].name, d.arr[i].age);
   }
}

int main()
{
   /* First create an array on the stack to store our elements in.
      Note we could create an empty array with a size instead and
      set the elements later. */
   MyType arr[] = {new_MyType(10, "Sam"), new_MyType(3, "Baxter")};
   /* Now create a "MyTypeArray" which will use the array we just
      created internally. Really it will just store the value of the pointer
      "arr". Here we are manually setting the size. You can use the sizeof
      trick here instead if you're sure it will work with your compiler. */
   MyTypeArray array = new_MyTypeArray(2, arr);
   /* MyTypeArray array = new_MyTypeArray(sizeof(arr)/sizeof(arr[0]), arr); */
   print_MyType_names(array);
   return 0;
}
3
задан Temani Afif 6 February 2018 в 00:47
поделиться

2 ответа

Если вы не хотите, чтобы все, что делится в другой структуре, вы должны использовать first-of-type и last-of-type вместо first-child и last-child

.area {
  height: 100px;
  width: 100px;
}

.area:first-of-type {
  background-color: red;
}

.area:last-of-type {
  background-color: green;
}
<div class="area">1</div>
<div class="area">2</div>
<div class="area">3</div>
<div class="area">4</div>

Так как Temani Afif указал, это решение произвольно и может не работать во всех ситуациях. Как показано, он неправильно работает над фрагментом кода, но, например, он работает на JSFiddle. И.Е. https://jsfiddle.net/vm1scerv/

4
ответ дан Temani Afif 15 August 2018 в 17:25
поделиться
  • 1
    Спасибо! Но я не понимаю, почему браузер не знает, что такое последний ребенок, когда нет родительского div. Почему организму не хватает родительского контейнера? – user5857398 6 February 2018 в 00:13
  • 2
    @ user5857398 последний ребенок учитывает все дочерние .. тело достаточно в качестве контейнера, но оно содержит другой элемент, добавленный после вашего кода :) проверяйте инструменты разработчика, и вы увидите их .. и, таким образом, последний ребенок не будет последним div вашего кода но добавленный элемент в конце – Temani Afif 6 February 2018 в 00:14
  • 3
    Хороший улов! @ user5857398 Ваш html / css будет работать на полной автономной веб-странице, он просто не работает в фрагменте кода SO или скрипке, потому что они вставляют некоторые невидимые теги в dom. – Stickers 6 February 2018 в 00:18
  • 4
    вот оно, спасибо u! – user5857398 6 February 2018 в 00:19
  • 5
    @ user5857398 last-child не рассматривает классы ... он рассматривает только элементы – Temani Afif 6 February 2018 в 00:20
  • 6
    ... также я верю, что OP запутался в селекторах элементов класса vs child vs type. – Stickers 6 February 2018 в 00:21
  • 7
    поэтому удалите дополнительный div тогда :) и убедитесь, что ваш код не будет работать;) – Temani Afif 6 February 2018 в 00:24
  • 8
    я понял :( – user5857398 6 February 2018 в 00:25
  • 9
    последний и последний тип оба будут терпеть неудачу здесь или могут потерпеть неудачу, так как вы не знаете контент, добавленный в тело в конце ... Вот почему в обоих случаях лучше использовать контейнер :) – Temani Afif 6 February 2018 в 00:27
  • 10
    @Drubio это произвольно, поэтому мы не должны полагаться на это ... в этом фрагменте добавлен div в конце, а jsfiddle в этом случае (но это может быть в других случаях!). Поэтому лучше избегайте этого, так как это может вести себя по-разному в каждой ситуации и для каждого инструмента – Temani Afif 6 February 2018 в 00:32
4
ответ дан Temani Afif 5 September 2018 в 16:30
поделиться