# Thread: can u help me with pointers?plzzzzzzzz

1. ## can u help me with pointers?plzzzzzzzz

Assignment #2 (Pointers)

Problem (1) (Array of pointers to Functions that manipulate pointers)
Use pointer operations only to manipulate the array elements.
Use an array of pointers processNumbers where each element of the array points to one of the above functions.

a) Write a function addElement that takes as parameters: a pointer to a sorted array of integer numbers, array size (number of elements stored in the array), and the number to be inserted in the array. The function should insert the element in the proper position to keep the list sorted. Use pointer operations to access the elements of the array. The function prototype is

void addElement(intt *array, int *sizeptr, int num);

b) Write a function deleteElement that takes as parameters: a pointer to a sorted array of integer numbers, array size (number of elements stored in the array), and the number to be removed from the array. The function should remove the element and keep the list sorted. The function prototype is

void deleteElement(int *array, int *sizeptr, int num);

c) Write a function printArray that takes as parameters: a pointer to array of int numbers and its size. The function should print the contents of the array. The function prototype is void printArray(int *array, int size);

d) Write a function findMaximum that takes as parameters: an array of integer numbers and its size. The function should find the maximum number in the array. Use a suitable prototype.

e) Write a program with a menu driven interface. The program should offer the user 4 options as follows:

Enter a choice:

0 Add a number to the list

1 Remove a number from the list

2 Print the array numbers

3 Find Maximum

4 End program

Problem (2)
a) Write a function findMaxPos that takes as parameters : a pointer which points to a two‑dimensional array array2dptr, number of rows, and number of columns. The function returns the position (row #, column#) of the maximum number in the 2d‑array.The address of any element in the 2d-array with array2dptr pointing to the first element in the array is array2dptr +rownum*colsize+colnum. The function prototype is int find2dTotal(int *, int, int);

b) Write a main program to declare, store values in the 2d-array, and call the above function find2dTotals to display the total of adding the values of the cells.

thanx

2. i dont think anyones going to do your assignment/homework for you. why dont you give it a try first then we can help

3. ## plz help

Iam studing for my mid semester exams
so I dont have the time
and if u want the truth
I didnt under stand the pointers
if u gona explain to me
I will be thankful

4. no, kurz7 is right.

either pick a question and ask it(one you have, not homework), or show some code.

5. First, I wanna say nobody wanna do the homework for somebody else, when this person is lazy to try to do them.

So, I won't do your work. I wanna just to try to explain the work with pointers.....
For Further information, read the www.cprogramming.com tutorials.....

pointers
===================

declaration syntax:

Datatype *pointervariable

Example:
+++++++++++++

int x=5;

name: x
value: 5

code:
Code:
```#include <stdio.h>

int main()
{
int x=5;
printf("The address of x is %p \n",&x);
return 0;
}```

code:
Code:
```#include <stdio.h>

int main()
{
int check;
int chapter1 = 5;
int chapter2 = 60;
int chapter3 = 166;
int *data;

do{
printf("\tChapter overview\n");
printf("\t*******************************\n\n");
printf("\t-1- Chapter 1\n");
printf("\t-2- Chapter 2\n");
printf("\t-3- Chapter 3\n");
printf("\t-4- End\n");
printf("\n");
printf("\tOption: ");
scanf("%d",&check);
printf("\tYou find chapter %d on ",check);

switch(check)
{
case 1 :  data=&chapter1;
printf("page %d\n",*data);
break;
case 2 :  data=&chapter2;
printf("page %d\n",*data);
break;
case 3 :  data=&chapter3;
printf("page %d\n",*data);
break;
default:  printf("page ???\n");
break;
}
}
while(check<4);
return 0;
}```

This is another example:

Code:
```#include <stdio.h>

int main()
{
int x=5;
int *y;

printf("\ny=&x;\n\n");
y=&x;              /*y has now the address of x */

printf("\ny points to this address %p\n",y);
printf("this is the address of x = %p\n",&x);

printf("\nWATCH OUT!!!\n\n");

*y=10;
printf("*y=10\n\n");

printf("it is still the address of x (%p)\n",&x);

return 0;
}```

The next example is imporatant. And never use such crap, it coul be very dangerous:
Code:
```#include <stdio.h>

int main()
{
int *y;
*y=10;
printf("the value of *y is %d\n",*y);
return 0;
}```
This is dangerous, because y points to a not defined address..........

you could try to prevent such mistakes, when u use:
Code:
`#define NULL (void *)0`
example:

Code:
```#include <stdio.h>

int main()
{
int *y=NULL;

if(y==NULL)
{
printf("The pointer has an illegal/not defined address\n");
}

else
{
*y=10;
}

return 0;
}```

Some other things to know:
Code:
```int *ptr;    /* declaration */
int var;

ptr=&var;    /* initialistion : ptr get the address of var */
*ptr=100;   /* dereferenciation: var get the value 100 */
*ptr+=100; /* dereferenciation: we add 100 to var */
*ptr++;    /* dereferenciation: var has now the value of 201 */
*ptr--;    /* var has now the value of 200 again */
printf("%d",*ptr);    /* outputs the value of var */
printf("%p",&ptr);    /* outputs the address of ptr */
printf("%p",ptr)      /* outputs the address of var */```

6. And the second part........

pointers, which points onto other pointers

example:
Code:
```int *ptr1;
int *ptr2;
ptr1=ptr2;```
code:
Code:
```#include <stdio.h>

int main()
{
int value=10;
int *ptr1;
int *ptr2;

ptr1=&value;
ptr2=ptr1;

return 0;
}```

Pointers in C/c++ have always to have the same datatypes as variables...........

example, this code returns crap..... and good compilers like gcc would not compile the code and return an error, like cannot convert double* to int*:
Code:
```#include <stdio.h>

int main()
{
int *int_ptr;
double double_value=999.999;

int_ptr=&double_value;
printf("*int_ptr=%d double=%f\n",*int_ptr, double_value);
return 0;
}```

Now, I gonna explain the usage of pointers as function parameters "Call-By-Reference"
There is another method "call-by-value", which has often disadvanteges, because the compiler has always to copy the parameters, cause the call-by-value parameters are used as local variables in the functions.......

example:
Code:
```#include <stdio.h>
#define PI 3.141592

float circlearea(float value)
{
return (value = value * value * PI);
}

int main()
{
float r, area;
printf("We calculate a circle area!!\n\n");
printf("Input r : ");
scanf("%f",&r);

area = circlearea(r);
printf("\nThe circle area: %f\n",area);
return 0;
}```
In such a case, we can easily use the address of r and pass the address of r as argument to the function.......

call-by-reference example:
Code:
```#include <stdio.h>
#define PI 3.141592

void circlearea(float *value)
{
*value = ( (*value) * (*value) * PI );
}

int main()
{
float r;
printf("We calculate the circle area\n\n");
printf("Input r: ");
scanf("%f",&r);
circlearea(&r);
printf("\nThe circlearea : %f\n",r);
return 0;
}```

7. It think, that this part will be very interesting for you:

ARRAYS and POINTERS

First....
Arrays and pointers have nothing in common. A pointer is the address of an address and an array name is only an address.

Here is an example, how to access arrays with pointers:
Code:
```#include <stdio.h>

int main()
{
int element[8]= {1,2,4,8,16,32,64,128};
int *ptr;
int i;

ptr=element;

printf("*ptr points onto the value of %d\n",*ptr);
printf("*ptr+1 points now onto the value of %d\n",*(ptr+1));
printf("*(ptr+3) = %d\n",*(ptr+3));

printf("\nAnd now a for loop: \n");

for(i=0; i<8; i++)
{
printf("element[%d]=%d \n",i,*(ptr+i));
}
return 0;
}```

When you use this:
ptr=element
You send the address of element to the pointer.
This works without the address operator, cause the ANSI standard says, that the Array name is always like a pointer, which points onto the first array element.

Here the example:
Code:
```#include <stdio.h>

int main()
{
int element[8] = {1,2,4,8,16,32,64,128};
int i;

printf("*element     = %d\n",*element);
printf("*(element+1) = %d\n",*(element+1));
printf("*(element+3) = %d\n",*(element+3));

printf("\nNow a for loop: \n");

for(i=0; i<8; i++)
{
printf("*(element+%d) = %d \n",i,*(element+i));
}
return 0;
}```
When u wanna use the address operator, it's ok too.
ptr=&element[0]; /* identical with ptr=element */

Now another example, call-by-reference with arrays and pointers.....

Code:
```#include <stdio.h>

void function(int *array, int n_array)
{
int i;
for(i=0; i < n_array; i++)
printf("%d ",array[i]);
printf("\n");
}

int main()
{
int values[] = { 1,2,3,5,8,13,21 };

function(values, sizeof(values)/sizeof(int));

return 0;
}```

I hope, I have helped you.......
~codingmaster

8. THANK U
I AM THANKFUL