Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

число элементов массива (C)

14K
21 сентября 2006 года
fly_girl
13 / / 24.04.2006
как узнать число элементов в массиве?
3.0K
21 сентября 2006 года
Мerlin
267 / / 25.07.2006
Для статически определенного массива

cnt = sizeof(имя_массива)/sizeof(тип_элементов);

напр.

int a[20];
int cnt = sizeof(a)/sizeof(int);
14K
21 сентября 2006 года
fly_girl
13 / / 24.04.2006
а функция:

int сhsize(int a[], int n){
if (n> sizeof(a)/sizeof(int) ) {return 0;}
return 1;
}

будет работать? а то у меня что-то не особо работает=(
3.0K
21 сентября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=fly_girl]а функция:

int сhsize(int a[], int n){
if (n> sizeof(a)/sizeof(int) ) {return 0;}
return 1;
}

будет работать? а то у меня что-то не особо работает=([/QUOTE]Не будет работать, так как в функции уже идет речь не о массиве, а об указателя на массив. А длина указателя равна 4 байта.
2
21 сентября 2006 года
squirL
5.6K / / 13.08.2003
[quote=fly_girl]а функция:

int сhsize(int a[], int n){
if (n> sizeof(a)/sizeof(int) ) {return 0;}
return 1;
}

будет работать? а то у меня что-то не особо работает=([/quote]
эээ... а как она должна работать? на i386 архитектуре, при n>1 она будет возвращать 0.
2
21 сентября 2006 года
squirL
5.6K / / 13.08.2003
добавтье в функцию параметр - размер передаваемого массива
242
21 сентября 2006 года
Оlga
2.2K / / 04.02.2006
учитывая смысл функции, то надо не добавить а заменить параметр.
вместо указателя на функцию (int a[]), передавать его размер(sizeof(a)),
и тогда получим:

 
Код:
int сhsize(int sizeA, int n){
if (n > sizeA/sizeof(int) ) return 0;
return 1;
}

а можно в функцию сразу послать как параметр namefunction(sizeof(a)/sizeof(int), тогда
 
Код:
int сhsize(int n1, int n2){
if (n2 > n1 ) return 0;
return 1;
}
3.0K
21 сентября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=OlgaKr]учитывая смысл функции, то надо не добавить а заменить параметр.
вместо указателя на функцию (int a[]), передавать его размер(sizeof(a)),
и тогда получим:

 
Код:
int сhsize(int sizeA, int n){
if (n > sizeA/sizeof(int) ) return 0;
return 1;
}

а можно в функцию сразу послать как параметр namefunction(sizeof(a)/sizeof(int), тогда
 
Код:
int сhsize(int n1, int n2){
if (n2 > n1 ) return 0;
return 1;
}
[/QUOTE]Это уже решение. Только Знак больше нужно заменить на больше равно.
242
22 сентября 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:
Только Знак больше нужно заменить на больше равно.


а это уже не ко мне, я мысли читать не умею.
у fly_girl написано больше (copy/paste), ей видней что она хочет.
з.ы. для меня вообще ситуация немного странная, когда неизвестен размер стати-го массива.

3
22 сентября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=fly_girl]а функция:

int сhsize(int a[], int n){
if (n> sizeof(a)/sizeof(int) ) {return 0;}
return 1;
}

будет работать? а то у меня что-то не особо работает=([/QUOTE]

В C++ будет работать так:
 
Код:
template <int N>
int сhsize( int (&a)[N], int n )
{
    return (n > N) ? 0 : 1;
}
242
22 сентября 2006 года
Оlga
2.2K / / 04.02.2006
[quote=Green]В C++ будет работать так: ...[/quote]
у нее задача по С
309
22 сентября 2006 года
el scorpio
1.1K / / 19.09.2006
При помощи sizeof можно определить только размер массива в стеке текущей функции, что зачастую бессмысленно, ибо этот размер задаёт сам программист константой
 
Код:
const int cArSize = 100;
char str [cArSize];

А для определения размера объекта (массива) по его указателю используется функция _mSize (void *obj) - точное название функции не помню, хелпа под рукой сейчас нет :(
 
Код:
Function (TRecord *pRecArray)
{
int Size = _mSize (pRecArray) / sizeof (*pRecArray); // или / sizeof (TRecArray)
}
3.0K
22 сентября 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=el scorpio]А для определения размера объекта (массива) по его указателю используется функция _mSize (void *obj) - точное название функции не помню, хелпа под рукой сейчас нет :(
 
Код:
Function (TRecord *pRecArray)
{
int Size = _mSize (pRecArray) / sizeof (*pRecArray); // или / sizeof (TRecArray)
}
[/QUOTE]Согласно help _msize.
Код:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

int сhsize(int *a, int n)
{
  if(n>=_nsize(a)/sizeof(int) )
    return 0;
  return 1;
}

void main()
{
  int *a = (int *)malloc(100*sizeof(int));
  int t = chsize(a, 80);
...
...
5.4K
22 сентября 2006 года
Svyatozar
221 / / 11.09.2006
Да никак нельзя узнать размер массива. Для чего придумали строки заканчивающиеся нулем?
14K
22 сентября 2006 года
fly_girl
13 / / 24.04.2006
я попробую _nsize...
дело в том, что у меня есть функция, в которую передаются 2 параметра: массив и число n, обозначающее с каким кол-вом элементов этого массива нужно работать.
но нужно обработать ситуацию, когда n больше кол-ва элементов в массиве.
309
22 сентября 2006 года
el scorpio
1.1K / / 19.09.2006
[QUOTE=fly_girl]дело в том, что у меня есть функция, в которую передаются 2 параметра: массив и число n, обозначающее с каким кол-вом элементов этого массива нужно работать.
но нужно обработать ситуацию, когда n больше кол-ва элементов в массиве.[/QUOTE]
Хорошая функция :)
Вот только ситуацию такую проще не создавать, чем решать:D
А вообще, в подобных ситуациях лучше использовать стандартный Builder'овский шаблон DynamicArray. Этот объект-контейнер изображает массив и сам следит за выделением/освобождением памяти, а также корректностью индексации.
14K
22 сентября 2006 года
fly_girl
13 / / 24.04.2006
просто задание с обычными массивамии
и просили эту ситуацию учесть..
5.4K
22 сентября 2006 года
Svyatozar
221 / / 11.09.2006
[QUOTE=fly_girl]просто задание с обычными массивамии
и просили эту ситуацию учесть..[/QUOTE]
Мое мнение: либо это задача на смекалку, либо твой учитель курит грибы. Но в обоих случаях переданный функции указатель - это всего лишь число соответствующее адресу в памяти.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог