Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connections
Warning: mysqli::query(): Couldn't fetch mysqli in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\index.php on line 66
Article <v6oct4$2djgq$2@dont-email.me>
Deutsch   English   Français   Italiano  
<v6oct4$2djgq$2@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: David Brown <david.brown@hesbynett.no>
Newsgroups: comp.lang.c
Subject: =?UTF-8?Q?Re=3A_technology_discussion_=E2=86=92_does_the_world_need?=
 =?UTF-8?B?IGEgIm5ldyIgQyA/?=
Date: Thu, 11 Jul 2024 12:41:40 +0200
Organization: A noiseless patient Spider
Lines: 77
Message-ID: <v6oct4$2djgq$2@dont-email.me>
References: <v66eci$2qeee$1@dont-email.me> <v6ard1$3ngh6$4@dont-email.me>
 <v6b0jv$3nnt6$1@dont-email.me> <87h6d2uox5.fsf@nosuchdomain.example.com>
 <v6d779$6rk5$2@dont-email.me> <v6e76u$c0i9$1@dont-email.me>
 <v6esqm$fian$2@dont-email.me> <v6f7vg$hgam$1@dont-email.me>
 <20240707164747.258@kylheku.com> <v6gl83$s72a$1@dont-email.me>
 <v6h8ao$ur1v$1@dont-email.me> <v6jhk3$1drd6$1@dont-email.me>
 <v6jiud$1dsjb$1@dont-email.me> <877cdur1z9.fsf@bsb.me.uk>
 <v6joi4$1epoj$1@dont-email.me> <871q42qy33.fsf@bsb.me.uk>
 <v6k6i0$1h4d3$1@dont-email.me> <87ed82p28y.fsf@bsb.me.uk>
 <v6m03l$1tf05$1@dont-email.me> <87r0c1nzjj.fsf@bsb.me.uk>
 <v6m716$1urj4$1@dont-email.me> <87ikxconq4.fsf@bsb.me.uk>
 <v6n8iu$24af0$1@dont-email.me> <20240711115418.00001cdf@yahoo.com>
 <v6oamt$2d8nn$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Thu, 11 Jul 2024 12:41:41 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="ae48152f062f08333130ccb39a825b01";
	logging-data="2543130"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/M/HTtDh/XcbuUQGeRC6B8PqVMOocl7W8="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:glbs2CWKtPgyEy11xGwltXwre1Y=
Content-Language: en-GB
In-Reply-To: <v6oamt$2d8nn$1@dont-email.me>
Bytes: 4900

On 11/07/2024 12:04, bart wrote:
> On 11/07/2024 09:54, Michael S wrote:

>> No, it isn't.
>> If [in C] it was possible to pass arrays to functions, either by value
>> or by reference, then callee would know the length of passed array. As
>> it is, callee does not know it.
> 
>> The length can be passed in a separate parameter, but then it does not
>> have to be the same as an original.
> 
> That's rather specious. In my language (probably in C too), most passed 
> arrays are unbounded, allowing the same function to work with arrays of 
> different sizes.
> 
> So that would need a separate Length parameter, even using by-reference.

No.

Like any object, an array has data, and characteristics including the 
type of the elements, and for an array, the length of the array.  If you 
pass an object, by reference or by value, the receiver (function 
parameter, or caller if we are talking about return values) gets the 
characteristics as well as the data.

In C, if you write code that looks a bit like it is passing an array, 
the object's characteristics don't follow along with it - therefore you 
are not passing the array.  If in your language, the characteristics 
also do not follow, as part of the parameter, then your language cannot 
pass arrays either.

If you need to have a separate manual length parameter, then your 
language is doing the same as C - you are passing a pointer by value 
without the full object information.

So perhaps your confusion here lies in a misunderstanding of how arrays 
as passed in your own language, and you have carried that confusion over 
to C.

> 
> In that regard, it's no different from the C: my array by-ref and C's 
> alledged by-ref both cannot determine the array length solely from the 
> parameter.
> 
> (In my language, attempts to get the length yields 0, which makes sense 
> as the parameter's bounds are zero. In C, it will yield the size of the 
> pointer.)
> 
> But when the array IS bounded, then in C:
> 
>    typedef byte vector[4];
> 
>    void F(vector a) {
>        printf("%zu\n", sizeof(a));
>        printf("%zu\n", sizeof(vector));
>    }
> 
> The first printf shows 8 (the pointer size); the second shows 4 (the 
> array size). So it /can/ access the bounds.

No, it cannot access the bounds of the "array parameter" here.  (I use 
quotation marks because there are no array parameters in C - just things 
that look a little like them.)

F takes a pointer to byte as a parameter, not a "vector" or an array of 
bytes or a pointer to an array.  The function has no more access to the 
size of a "vector" than it has access to the size of a "float".

> 
> (For unbounded arrays, my language offers an alternative: slices, which 
> contain their length. This is available whatever the calling mechanism.)
> 

A slice is presumably an object that encapsulates a pointer to data and 
size information - a struct.  It might give a nice syntax in your 
language, but it is a different concept entirely.