strlen no es el tamaño de ningun array, unicamente busca hasta que encuentre un 0, y entonces ahi determina el final del array, que da igual que tenga 100 posiciones y solo los 2 primeros en uso, como 100/100
int8 num_n(int8* array, size_t length){
size_t a;
int8 cnt = 0;
for(a=0 ; a<length ; a++){
if( vector[a] == 0 ) {
cnt=cnt+1;
}
}
return cnt;
}
los punteros no ahorran memoria, eso ya lo he dicho varias veces, un puntero es unicamente una variable que almacena una direccion de memoria para usarla, sin embargo la memoria que utilizas tiene que estar controlada, porque puedes pisar datos, de todas formas lo puedes pisar tanto con punteros como con arrays.
struct BUFFER {
int8 buf[512];
int8 pos_r;
int8 pos_w;
};
int8 pop_buff (struct BUFFER buf, int8 pos) {
...
}
int8 pop2_buff (struct BUFFER* buf, int8 pos) {
...
}
char array[5];
si ponemos array[100]=10; no nos da error, sin embargo estamos escribiendo en una parte de la memoria de la cual no habemos reservado por lo cual podemos estar sobrescribiendo otra variable en esa direccion.
char *p=&array;
al igual que si ponemos *(p+100)=10; estamos haciendo lo mismo que en el caso anterior