Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Buy a domain name - Register cheap domain names from $0.99 - Namecheap

Scalable Hosting That Grows With You

Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Semrush - keyword research tool

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

40,561 questions

52,726 answers

573 users

How to use pointer to pointer to pointer to pointer (*p **pp ***ppp ****pppp) in C

2 Answers

0 votes
#include <stdio.h>
  
int main ()
{
	int arr[] = { 18, 30, 12, 3, 33, 27 }; 

	int *p = arr;
	int **pp = &p;
	int ***ppp = &pp;
	int ****pppp = &ppp;
	
	printf("%p\n", arr);	
	printf("%p\n", p);	
	printf("%p\n", *pp);
	printf("%p\n", **ppp);	
	printf("%p\n\n", ***pppp);
	
	printf("%d\n", arr[0]);	
	printf("%d\n", p[0]);	
	printf("%d\n", *pp[0]);
	printf("%d\n", **ppp[0]);
	printf("%d\n\n", ***pppp[0]);
	
	printf("%d\n", arr[0]);	
	printf("%d\n", *p);	
	printf("%d\n", **pp);
	printf("%d\n", ***ppp);
	printf("%d\n\n", ****pppp);
	
	printf("%d\n", arr[1]);	
	printf("%d\n", *(p + 1));	
	printf("%d\n", *(*pp + 1));
	printf("%d\n", *(**ppp + 1));
	printf("%d\n\n", *(***pppp + 1));
	
	arr[2] = 700;
	printf("%d\n\n", arr[2]);	
	
	*(p + 2) = 200;
	printf("%d\n", arr[2]);	
	printf("%d\n\n", *(p + 2));	
	
	*(*pp + 2) = 400;
	printf("%d\n", arr[2]);	
	printf("%d\n\n", *(*pp + 2));
	
	*(**ppp + 2) = 500;
	printf("%d\n", arr[2]);
	printf("%d\n\n", *(**ppp + 2));
	
	 *(***pppp + 2) = 900;
	printf("%d\n", arr[2]);
	printf("%d\n", *(***pppp + 2));

	return 0;
}




/*
run:

000000000062FE00
000000000062FE00
000000000062FE00
000000000062FE00
000000000062FE00

18
18
18
18
18

18
18
18
18
18

30
30
30
30
30

700

200
200

400
400

500
500

900
900

*/

 



answered Feb 10, 2020 by avibootz
0 votes
#include <stdio.h>

void print(int arr[]) {
    printf("arr: ");
    for (int i = 0; i < 6; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}
   
int main () {
    int arr[] = { 18, 30, 12, 3, 33, 27 }; 
    
    print(arr);
 
    int *p = arr;
    int **pp = &p;
    int ***ppp = &pp;
    int ****pppp = &ppp;
     
    printf("arr = %p\n", arr);    
    printf("p = %p\n", p);  
    printf("*pp = %p\n", *pp);
    printf("**ppp = %p\n", **ppp);  
    printf("***pppp = %p\n\n", ***pppp);
     
    printf("arr[0] = %d\n", arr[0]); 
    printf("p[0] = %d\n", p[0]);   
    printf("*pp[0] = %d\n", *pp[0]);
    printf("**ppp[0] = %d\n", **ppp[0]);
    printf("***pppp[0] = %d\n\n", ***pppp[0]);
     
    printf("arr[0] = %d\n", arr[0]); 
    printf("*p = %d\n", *p); 
    printf("**pp = %d\n", **pp);
    printf("***ppp = %d\n", ***ppp);
    printf("****pppp = %d\n\n", ****pppp);
     
    printf("arr[1] = %d\n", arr[1]); 
    printf("*(p + 1) = %d\n", *(p + 1));   
    printf("*(*pp + 1) = %d\n", *(*pp + 1));
    printf("*(**ppp + 1) = %d\n", *(**ppp + 1));
    printf("*(***pppp + 1) = %d\n\n", *(***pppp + 1));
     
    arr[2] = 700;
    print(arr);
    printf("arr[2] = %d\n\n", arr[2]);   
     
    *(p + 2) = 200;
    print(arr);
    printf("arr[2] = %d\n", arr[2]); 
    printf("*(p + 2) = %d\n\n", *(p + 2)); 
     
    *(*pp + 2) = 400;
    print(arr);
    printf("arr[2 = %d\n", arr[2]); 
    printf("*(*pp + 2) = %d\n\n", *(*pp + 2));
     
    *(**ppp + 2) = 500;
    print(arr);
    printf("arr[2] = %d\n", arr[2]);
    printf("*(**ppp + 2) = %d\n\n", *(**ppp + 2));
     
     *(***pppp + 2) = 900;
    print(arr);
    printf("arr[2] = %d\n", arr[2]);
    printf("*(***pppp + 2) = %d\n", *(***pppp + 2));
 
    return 0;
}
 
 
 
 
/*
run:
 
arr: 18 30 12 3 33 27 
arr = 0x7ffd68e7a4d0
p = 0x7ffd68e7a4d0
*pp = 0x7ffd68e7a4d0
**ppp = 0x7ffd68e7a4d0
***pppp = 0x7ffd68e7a4d0

arr[0] = 18
p[0] = 18
*pp[0] = 18
**ppp[0] = 18
***pppp[0] = 18

arr[0] = 18
*p = 18
**pp = 18
***ppp = 18
****pppp = 18

arr[1] = 30
*(p + 1) = 30
*(*pp + 1) = 30
*(**ppp + 1) = 30
*(***pppp + 1) = 30

arr: 18 30 700 3 33 27 
arr[2] = 700

arr: 18 30 200 3 33 27 
arr[2] = 200
*(p + 2) = 200

arr: 18 30 400 3 33 27 
arr[2 = 400
*(*pp + 2) = 400

arr: 18 30 500 3 33 27 
arr[2] = 500
*(**ppp + 2) = 500

arr: 18 30 900 3 33 27 
arr[2] = 900
*(***pppp + 2) = 900
 
*/

 



answered Dec 27, 2020 by avibootz

Related questions

1 answer 123 views
123 views asked Feb 16, 2020 by avibootz
1 answer 275 views
1 answer 75 views
2 answers 137 views
2 answers 142 views
...