Sponsored Content
Top Forums Programming Pointer for 2D array seems to be 3D in C Post 302999243 by yifangt on Thursday 15th of June 2017 07:07:42 PM
Old 06-15-2017
Pointer for 2D array seems to be 3D in C

I am struggling with the pointer to 2D-array (cf: 2D array of pointers). Can anybody help me elaborate how the pointer x moves in the memory to access the individual of y[2][6], especially the high lighted lines?
I have talked to one of the curators of the forum, but I am still not quite clear.
Here is my code:
Code:
#include<stdio.h>

int main(void)
{
    int (*x)[2][6];                 //pointer for integers array in size of 2x6 (2 rows x 6 columns),
                                    //.i.e the array is always with size of 12?
//    int (*a[8])[5];                 //Line 9: a is a pointer array of size 8, each for integer array of size 5 

    int y[2][6] = {{11,12,13,14,15,16},
                   {21,22,23,24,25,26}};    //2D array of integers
    int *z;                      //pointer to integer
    int i;

    z = y[0];
    for(i = 0;i<6;i++)
        printf("%d ",z[i]);
    printf("\n");

    x = &y;    // More complicated situation for me!
    x = y;     // Warning: incompatible pointer type.
//    x[0][0] = y[0][0];     // won't work
        printf("   (x[0][0]): %p\n",  x[0][0]);
        printf("  *(x[0][0]): %d\n",*(x[0][0]));        //Q1a
        printf("  x[0][0][0]: %d\n",x[0][0][0]);        //Q1b
        printf("*(x[0][0]+1): %d\n",*(x[0][0]+1));      //Q1c
//        printf("*(x[0][0]+2): %d\n",*(x[0][0]+2));
//        printf("*(x[0][0]+3): %d\n",*(x[0][0]+3));
//        printf("*(x[0][0]+4): %d\n",*(x[0][0]+4));
        printf("*(x[0][0]+5): %d\n",*(x[0][0]+5));

        printf("    x[0][1]: %p\n",   x[0][1]);        //Q2a
        printf("    *x[0][1]: %d\n",*(x[0][1]));
        printf("  x[0][1][0]: %d\n",x[0][1][0]);       //Q2b 
        printf("*(x[0][1]+1): %d\n",*(x[0][1]+1));     //Q2c 
//        printf("*(x[0][1]+2): %d\n",*(x[0][1]+2));
//        printf("*(x[0][1]+3): %d\n",*(x[0][1]+3));
        printf("*(x[0][1]+4): %d\n",*(x[0][1]+4));
        printf("*(x[0][1][4]): %d\n",*(x[0][4]));
        
    printf("&y: %p\n", &y);
    printf(" y: %p\n",  y);
  
    printf(" x: %p\n",  x);
    printf("&x: %p\n", &x);
    
    return 0;
}

1) Although y and &y are the same, but x = y issues warning;
2) Q1a/Q2a is the part I think I understand which is the first element of each row of y.
3) but Q1b/c, and Q2b/c turns out to be 3-D to me.
Can anybody give me a diagram how pointer x moves in the memory for each member of y?
4) Line 9: int (*a[8])[5]; is related, and I put it here for future reference but skip it at this moment.

Thanks a lot!
 

10 More Discussions You Might Find Interesting

1. Programming

pointer

void main() { int a={1,2,3,4,5,6,7,8,9,10}; int *p=a; int *q=&a; cout<<q-p+1<<endl; } The output is 10, how? if we give cout<<q it will print the address, value won't print.... if we give cout<<p it will print the address, value won't print.... p has the base addr; q... (1 Reply)
Discussion started by: sarwan
1 Replies

2. UNIX for Dummies Questions & Answers

Storing pointer array in C

All .. I am having a pointer array . And trying to store the addess into that pointer array . please see below the problem i faced code: int cnt1; char *t_array; char *f_array; for(cnt1=0; cnt1<1000; cnt1++) { t_array =... (1 Reply)
Discussion started by: arunkumar_mca
1 Replies

3. Programming

far pointer

what is far pointer in C (1 Reply)
Discussion started by: useless79
1 Replies

4. Programming

pass a pointer-to-pointer, or return a pointer?

If one wants to get a start address of a array or a string or a block of memory via a function, there are at least two methods to achieve it: (1) one is to pass a pointer-to-pointer parameter, like: int my_malloc(int size, char **pmem) { *pmem=(char *)malloc(size); if(*pmem==NULL)... (11 Replies)
Discussion started by: aaronwong
11 Replies

5. Programming

C pointer/array duality confusion

Hi all, Can anyone provide help with getting the right syntax regarding array/pointers in C in the following code? Can't locate a specific example which clarifies this... Say I declare a typedef to an array of pointers to some type... /** * An array of ptrs to sections */ typedef... (4 Replies)
Discussion started by: gorga
4 Replies

6. Programming

help with char pointer array in C

i have an array like #define NUM 8 .... new_socket_fd = accept(socket_fd, (struct sockaddr *) &cli_addr, &client_length); char *items = {"one", "two", "three", "four", "five", "six", "seven", "eight"}; char *item_name_length = {"3", "3", "5", "4", "4", "3", "5", "5"}; ... (1 Reply)
Discussion started by: omega666
1 Replies

7. Programming

structure pointer array as function parameters

if i create an array of pointers to a structure "struct node" as: struct node *r; and create "n" number of "linked lists" and assign it to the various struct pointers r using some function with a return type as structure pointer as: r=multiplty(.......) /*some parameters*/ is... (2 Replies)
Discussion started by: mscoder
2 Replies

8. Programming

Pointer and address

This code is to print out the program name and arguments list one by one: 1 #include<stdio.h> 2 3 void main(int argc, char *argv) 4 { 5 int iCount = 0; 6 while (iCount < argc) { 7 printf("argc:%d\t%s\n",iCount, argv); 8 ... (14 Replies)
Discussion started by: yifangt
14 Replies

9. Programming

Unclear pointer and array

Hello, The purpose of the program is to print a sub string from the prompt inputs. I do not understand why char pointer does not work but char array will for line 40 and Line 41. ./a.out thisisatest 0 8 substring = "thisisat"And my code is: #include <stdio.h> #include <stdlib.h> #include... (29 Replies)
Discussion started by: yifangt
29 Replies

10. Programming

Character pointer to Character array

how to copy content of character pointer to character array in c programming.. char *num; char name=num; (1 Reply)
Discussion started by: zinat
1 Replies
AUPARSE_INIT(3) 						  Linux Audit API						   AUPARSE_INIT(3)

NAME
auparse_init - initialize an instance of the audit parsing library SYNOPSIS
#include <auparse.h> auparse_state_t *auparse_init(ausource_t source, const void *b); DESCRIPTION
auparse_init initializes an instance of the audit parsing library. The function returns an opaque pointer to the parser's internal state. It is used in subsequent calls to the library so. The source variable determines where the library looks for data. Legal values can be: AUSOURCE_LOGS - use audit logs AUSOURCE_FILE - use a file AUSOURCE_FILE_ARRAY - use several files AUSOURCE_BUFFER - use a buffer AUSOURCE_BUFFER_ARRAY - use an array of buffers AUSOURCE_DESCRIPTOR - use a particular descriptor AUSOURCE_FILE_POINTER - use a stdio FILE pointer AUSOURCE_FEED - feed data to parser with auparse_feed() The pointer 'b' is used to set the file name, array of filenames, the buffer address, or an array of pointers to buffers, or the descriptor number based on what source is given. When the data source is an array of files or buffers, you would create an array of pointers with the last one being a NULL pointer. Buffers should be NUL terminated. RETURN VALUE
Returns a NULL pointer if an error occurs; otherwise, the return value is an aopaque pointer to the parser's internal state. SEE ALSO
auparse_reset(3), auparse_destroy(3). auparse_feed(3). AUTHOR
Steve Grubb Red Hat Feb 2007 AUPARSE_INIT(3)
All times are GMT -4. The time now is 08:19 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy