C Pointer

#include <stdio.h>
#include <stdlib.h>
 
int arraySum(int array[], const int n){
    int sum = 0, * ptr;
   
    int * const arrayEnd = array + n;
 
    printf("%p\n", array); // show 0028FEF8
    printf("%p\n", &array); // show 0028FEE0
 
    printf("------------------\n");
 
    for(ptr = array; ptr < arrayEnd; ++ptr)
         sum += *ptr;
   
 
    return sum;
}
 
 
int main(){
    int values[10] = { 3, 7, -9, 3, 6, -1, 7, 9, 1, -5 };
    // but here same address show 0028FEF8
    printf("%p\n",values); // show 0028FEF8
    printf("%p\n",&values); //show 0028FEF8
    printf("----------------------\n");
 
 
   // printf("%p\n", ptr);
 
 
    printf ("The sum is %i\n", arraySum (values, 10));
 
    return 0;
}

salam bu kodda əsas məqsədi başa düşmüşəm amma 1 az belə deyək oynadıgdan sonra kodnan belə 1 şey gördüm array və &array funksiyadan kənarda yəni main funksiyya daxilində eyni adresi gösdərir məsələn 0028FEF8 adresin(commentdə yazmışam) amma funksiyya daxilində (arraySum) fərqli məsələn array – 0028FEF8 &array – 0028FEE0 adreslərin gösdərillər bunun səbəbi nədi ? qabagcadan təşəkkürlər


Kateqoriya: Sual . . Qısa keçid.

Verilmiş cavablar və yazılan şərhlər (3 cavab var)

(20:57, 12/11/2016 ) #65937

Salam. bu çətin sualdı. Bunu tam başa düşmək biraz təcrübə tələb edir. Bacardığım qədər izah eləməyə çalışacam. Burda iki sual bir – birinin içindədir:

1) Niyə values və &values eyni ünvanı çap edir. Axı biri göstərici, digəri göstəriciyə göstəricidi(ikiqat göstərici)

2) Sizin sual – niyə main -də ünvanlar eynidir, arraySum -da isə fərqli.

2-yə cavab vermək üçün əvvəl 1 -i başa düşməliyik. C-də adi dəyişən , 1qat və 2 qat göstəricilər olur. Misal üçün :

  int x, *y, **z;

Əslində isə bunların 3-ü də tam ədəddir, sadəcə kompilyator bilir ki x-ə yazılan məlumata ancaq qiymət, y-ə yazılan məlumata ancaq ünvan, z-tə yazılan məlumata ünvanın ünvanı kimi yanaşmaq lazımdır. Normalda bu 3 dəyişən yaddaşda int x,y,z; kimi yadda saxlanılır və onların hər birində 5, 12, 234 v.s. kimi ədədlər yerləşir. Ünvanda öz növbəsində bir ədəddir, tam ədəd. Array C-də const pointer -dir. Yəni pointerdi, sadəcə istinad etdiyi ünvan dəyişə bilməz. Buna görə onun qiyməti ilə ünvanı üst-üstə düşür.

Keçək ikinci suala. burda diqqət eləsəz main -də value birbaşa çap olunur, amma arraysum -a parametr kimi ötürülür. Məsələ də elə bundadır. Funksiyaya ötürülən parametr əvvəlcə stekə yerləşdirilir. Funksiyanın daxilində ona ötürülən parametrin ünvanın çap eliyəndə o stekdəki ünvanı çap eliyir.

Cərgələrin yaddaşda yerləşməsi, funksiyaya parametr ötürülməsi, stek v.s. ilə daha ətraflı Programming from ground up kitabından məlumat əldə edə bilərsiniz.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(23:34, 12/11/2016 ) #65940

Çox sağolun Əhməd müəllim izah üçün başa düşdüm hər dəfə kömək edirsiz təşəkkülər 1 də bu incə məqamlar kitablarda ən azınnan hələki oxuduğum kitabda yazılmır bunları mən necə örgənəcəm təcrübə etdikcə ya necə ?

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

(19:13, 13/11/2016 ) #65970

Bunun üçün sistem proqramlaşdırmanı örgənmək lazımdır. Linux nüvə hakinq-dən başlaya bilərsiniz.

Cavablamaq üçün sağ sütundan hesaba daxil olmaq lazımdır

Cavab verin


Cavab yazmaq üçün lütfən sağ sütundan və ya buradan hesaba daxil olun.

Üzvlər üçün giriş

Qeydiyyat

Elan qutusu

Software Developer - 571 xal

E. Hacı - 568 xal

Onar Alili - 526 xal

Dilsuz - 448 xal

Cabbarov Sübhan - 414 xal

Ruslan Butdayev - 328 xal

Namiq Bəndəli - 297 xal

U.Tarlan - 244 xal

Meherremoff - 234 xal

Bextiyar Azeroglu - 214 xal

Sistemə daxil olmuş 18589 sualdan 94%-dən çoxu cavablandırılmışdır.

Proyekt haqqında

E-Haci.net istehsalı. © 2010-2017