int сhsize(int sizeA, int n){
if (n > sizeA/sizeof(int) ) return 0;
return 1;
}
число элементов массива (C)
как узнать число элементов в массиве?
cnt = sizeof(имя_массива)/sizeof(тип_элементов);
напр.
int a[20];
int cnt = sizeof(a)/sizeof(int);
int сhsize(int a[], int n){
if (n> sizeof(a)/sizeof(int) ) {return 0;}
return 1;
}
будет работать? а то у меня что-то не особо работает=(
int сhsize(int a[], int n){
if (n> sizeof(a)/sizeof(int) ) {return 0;}
return 1;
}
будет работать? а то у меня что-то не особо работает=([/QUOTE]Не будет работать, так как в функции уже идет речь не о массиве, а об указателя на массив. А длина указателя равна 4 байта.
int сhsize(int a[], int n){
if (n> sizeof(a)/sizeof(int) ) {return 0;}
return 1;
}
будет работать? а то у меня что-то не особо работает=([/quote]
эээ... а как она должна работать? на i386 архитектуре, при n>1 она будет возвращать 0.
добавтье в функцию параметр - размер передаваемого массива
вместо указателя на функцию (int a[]), передавать его размер(sizeof(a)),
и тогда получим:
Код:
а можно в функцию сразу послать как параметр namefunction(sizeof(a)/sizeof(int), тогда
Код:
int сhsize(int n1, int n2){
if (n2 > n1 ) return 0;
return 1;
}
if (n2 > n1 ) return 0;
return 1;
}
вместо указателя на функцию (int a[]), передавать его размер(sizeof(a)),
и тогда получим:
Код:
int сhsize(int sizeA, int n){
if (n > sizeA/sizeof(int) ) return 0;
return 1;
}
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;
}
if (n2 > n1 ) return 0;
return 1;
}
Цитата:
Только Знак больше нужно заменить на больше равно.
а это уже не ко мне, я мысли читать не умею.
у fly_girl написано больше (copy/paste), ей видней что она хочет.
з.ы. для меня вообще ситуация немного странная, когда неизвестен размер стати-го массива.
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;
}
int сhsize( int (&a)[N], int n )
{
return (n > N) ? 0 : 1;
}
у нее задача по С
Код:
const int cArSize = 100;
char str [cArSize];
char str [cArSize];
А для определения размера объекта (массива) по его указателю используется функция _mSize (void *obj) - точное название функции не помню, хелпа под рукой сейчас нет :(
Код:
Function (TRecord *pRecArray)
{
int Size = _mSize (pRecArray) / sizeof (*pRecArray); // или / sizeof (TRecArray)
}
{
int Size = _mSize (pRecArray) / sizeof (*pRecArray); // или / sizeof (TRecArray)
}
Код:
Function (TRecord *pRecArray)
{
int Size = _mSize (pRecArray) / sizeof (*pRecArray); // или / sizeof (TRecArray)
}
{
int Size = _mSize (pRecArray) / sizeof (*pRecArray); // или / sizeof (TRecArray)
}
Код:
#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);
...
...
#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);
...
...
Да никак нельзя узнать размер массива. Для чего придумали строки заканчивающиеся нулем?
дело в том, что у меня есть функция, в которую передаются 2 параметра: массив и число n, обозначающее с каким кол-вом элементов этого массива нужно работать.
но нужно обработать ситуацию, когда n больше кол-ва элементов в массиве.
но нужно обработать ситуацию, когда n больше кол-ва элементов в массиве.[/QUOTE]
Хорошая функция :)
Вот только ситуацию такую проще не создавать, чем решать:D
А вообще, в подобных ситуациях лучше использовать стандартный Builder'овский шаблон DynamicArray. Этот объект-контейнер изображает массив и сам следит за выделением/освобождением памяти, а также корректностью индексации.
и просили эту ситуацию учесть..
и просили эту ситуацию учесть..[/QUOTE]
Мое мнение: либо это задача на смекалку, либо твой учитель курит грибы. Но в обоих случаях переданный функции указатель - это всего лишь число соответствующее адресу в памяти.