[PD] free C lesson

Jonathan Wilkes jancsika at yahoo.com
Mon Aug 17 17:10:35 CEST 2015


But we're dealing with an array of t_words, so onset*sizeof(t_word) is what we want anyway, no?
-Jonathan 


     On Monday, August 17, 2015 10:55 AM, Claude Heiland-Allen <claude at mathr.co.uk> wrote:
   

 On 17/08/15 15:36, Jonathan Wilkes via Pd-list wrote:
> Hi list,Wondering if someone will give me a free lesson in C programming.
> In g_traversal.c, there's some code to retrieve a float from a t_word* vec.  It looks like this:
> *(t_float *)(((char *)vec) + onset));
> Why does vec need to be cast to char*?  t_word has to be as big as the largest member of the union, and the largest member has to be the same size as char*, right?  (Otherwise we'd have big problems...)

aiui pointer arithmetic is in increments of sizeof(pointee)
if onset is measured in bytes (I don't know if it is in this case, but 
it looks likely), then you need to have a pointer to bytes for the 
addition to be meaningful.  vec is already a pointer, but adding onset 
to a t_word* would offset the address by onset*sizeof(t_word) bytes


_______________________________________________
Pd-list at lists.iem.at mailing list
UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list


  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20150817/a80b97e7/attachment.html>


More information about the Pd-list mailing list