C Tutorial/Pointer/Pointer Calculation

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Change value of variable through pointer

#include <stdio.h>
int main(void)
{
  long num1 = 0;
  long num2 = 0;
  long *pnum = NULL;
  pnum = &num1;                              
  *pnum = 2;                                 
  ++num2;                                    
  num2 += *pnum;                             
  pnum = &num2;                              
  ++*pnum;                                   
  printf ("\nnum1 = %ld  num2 = %ld  *pnum = %ld  *pnum + num2 = %ld\n",
                                      num1, num2, *pnum, *pnum + num2);
  return 0;
}
num1 = 2  num2 = 4  *pnum = 4  *pnum + num2 = 8

Pointer arrays

In the pointer array, the array elements is the pointer.


#include <stdio.h>
main(){
    int *a[5];
    int i1=4,i2=3,i3=2,i4=1,i5=0;
    a[0]=&i1;
    a[1]=&i2;
    a[2]=&i3;
    a[3]=&i4;
    a[4]=&i5;
    printf("Address        Address in array         Value\n");
    int j;
    for(j=0;j<5;j++)
    {
        printf("%16u           %16u                 %d\n",
        a[j],a[j],a[j]);
    }
    printf("using pointer\n");
    int *b;
    b = a;
    for( j=0;j<5;j++)
    {
        printf("value of elements   %d %16lu\n",*b,*b,b);
        b++;
    }
}
value in array 2
      value in array 2
      value in array 2
      value in array 2
      value in array 2
      value in array 2
      value in array 2 and address is   631648
      value in array 2 and address is   631652
      value in array 2 and address is   631656
      value in array 2 and address is   631660
      value in array 2 and address is   631664
      value in array 2 and address is   631668

Store the address of number in pointer

#include <stdio.h>
int main(void)
{
  int number = 0;                 
  int *pointer = NULL;            
  number = 10;
  pointer = &number;  /*Store the address of number in pointer   */ 
  printf("pointer"s address: %p", &pointer);
  return 0;
}
pointer"s address: 9a378

When the pointer is incremented by an increment operator, it is always right incremented.

#include <stdio.h>
main(){
    int a[5];
    int i;
    for(i = 0;i<5;i++){
        a[i]=i;
    }
    int *b;
    b=a;
    for(i = 0;i<5;i++)
    {
        printf("value in array %d and address is %16lu\n",*b,b);
        b++;                 
    }
}