Postovanje svima!
Imam jedno pitanje vezano za vrsenje promjena na varijabli sa referencama u void funkciji.
Primjer funkcije 1:
Ovdje mi je jasno kako sam promjenio vrijednost unutar "s" stringa. Sa pointerskom aritmetikom.
#include<stdio.h>
#include<ctype.h>
void fun(char s[]);
int main(){
    char s[17];
    printf("Unesi string ne duzi od 16 znakova: ");
    scanf("%[^\n]", s);
    fun(s);
    printf("Rezultat:\"%s\"\n", s);
}
void fun(char s[]){
    char *i=s;
       for(; *i; i++){
          char c=tolower(*i);
          if(c-'a'&&c-'e'&&c-'i'&&c-'o'&&c-'u')
             *(s++)=*i;// <---- pointerska aritmetika
       }
    *s=0;
}
E sad dolazi druga verzija izvedba iste funkcije:
void fun(char s[]){
    int i, j=0;
    for(i=0; s[i]!='\0'; i++){
       char c=tolower(s[i]);
       if(!(c=='a'|| c=='e'|| c=='i'|| c=='o'|| c=='u'))
          s[j++]=s[i];// <---- ????
    }
    s[j]='\0';
}
Nije mi jasno zasto se string "s" promijenio a nisam koristio pointersku aritmetiku. Ili ako jesam onda mi to jos nije u potpunosti jasno.
Evo ovaj mali primjer odlicno pokazuje kako se vrjednost ne mijenja jer se nije prostupalo preko referenci:
#include<stdio.h>
void test(int a);
main(){
    int m;
    m=2;
    printf("\nM is %d",m);
    test(m);
    printf("\nM is %d\n",m);
    system("pause");
   return 0;
}
void test(int a){
    a=5;
}
I isti takav primjer ovog puta se vidi kako preko void funkcije koja ne vraca nista mjenja vrijednost preko referenci:
#include<stdio.h>
void test(int *ptr);
main(){
    int m;
    m=2;
    printf("\nM is %d",m);
    test(&m);
    printf("\nM is %d\n",m);
    return 0;
}
void test(int *ptr){
    printf("\nModifikacija vrijednosti unutar memoriske adrese %ld", ptr);
    *ptr=5;
}
Ako itko moze to malo pojasnit jer ne kuzim to nikako.
Hvala.
    
    
    