I am struggling with the pointer to 2D-array (cf: 2D array of pointers). Can anybody help me elaborate how the pointerxmoves 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.
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)
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)
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)
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)
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)
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)
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)
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
LEARN ABOUT OSF1
dxmsvngetdisplayed
DXmSvnGetDisplayed(3X)DXmSvnGetDisplayed(3X)NAME
DXmSvnGetDisplayed - Retrieves (returns) displayed entry numbers and related information necessary to draw a corresponding display.
SYNOPSIS
void DXmSvnGetDisplayed(
Widget widget,
int *entries(),
XtPointer *tags(),
int *ys(),
int len );
PARAMETERS
The identifier (widget ID) of the SVN widget. A pointer to an array of integers to receive the entry numbers of the entries being dis-
played. A pointer to an array of longwords to receive the application's entry_tag value for each entry displayed. If tags are not
required, a Null pointer may be passed. A pointer to an array of longwords to receive the y coordinates for each entry displayed. If y
coordinates are not required, a Null pointer can be passed. The number of entries allocated in the provided array.
DESCRIPTION
The DXmSvnGetDisplayed routine returns information about the entries that the SVN widget is currently displaying. This information can
then be used to keep a simultaneous display up to date with the SVN widget window (in the case of a dialog box, for example, which might
contain totals for the entries being displayed).
The application is responsible for managing the memory used to return this list of entries. As such, note the following: At the minimum,
the number of entries in the array should be capable of holding at least the number of entries indicated by the value returned from the
DXmSvnGetNumDisplayed routine. If there are more entries in the array than the application will need, the SVN widget will set the value
for those extra entries to 0. If the capacity of the arrays passed is less than the number of selected entries, only the number of entries
allocated in the provided array (the value for len) will be returned.
DXmSvnGetDisplayed(3X)