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.