English 中文(简体)
c 点人理解问题
原标题:c pointer understanding issue
  • 时间:2011-10-21 20:52:32
  •  标签:
  • c
  • pointers

Please have a look at the following code and tell me where does ***ptr locates ? i.e. i have a feelings that ***ptr actually locates at ptr[0][0][0] Am I wrong ? The following is a 3d representation of pointer. where I am trying to assign some characters and later i wanted to test what is the index of ***ptr? will be waiting

#include<stdio.h>
#include<conio.h>
#define row 5
#define rw 3
#define col 10


char ***ptr;
int i,j,k;


void main()
{

clrscr();

ptr=(char *)malloc(row*sizeof(char *));

for(i=0;i<row;i++)
    {
        *(ptr+row)=(char *)malloc(rw*sizeof(char *));
        printf("	:
");

           for(j=0;j<rw;j++)
           {
           *(*(ptr+row)+rw)=(char *)malloc(col*sizeof(char *));
           if(i==0 && j==0)
               {       //   *(*(ptr+row)+rw)="kabul";
            **ptr="zzz";

               }
           else
            *(*(ptr+row)+rw)="abul";
           printf("	address=%d %d%d = %s
",((ptr+row)+rw),i,j,*(*(ptr+row)+rw));

           }

         printf("
");
    }


printf("%c %d",***ptr,ptr);
getch();
}
问题回答

首先,我觉得你的表象很难读。

回答您的问题,是:ptr[0][0][0]***ptr的同义词。 由于<代码>a[b]按定义等于*(a+b),因此<代码>ptr[0]等于<代码>_ptr等。

页: 1

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define row 5
#define rw 3
#define col 10


char ***ptr;

int main()
{
    int i, j;

    ptr = (char***)malloc(row * sizeof(char **));

    for(i = 0; i < row; i++)
    {
        ptr[i]= (char**)malloc(rw * sizeof(char *));
        printf("	:
");

        for(j = 0; j < rw; j++)
        {
            ptr[i][j] = (char*)malloc(col * sizeof(char));
            if (i == 0 && j == 0)
            {
                strcpy(ptr[i][j], "zzz");
            }
            else
            {
                strcpy(ptr[i][j], "abul");
            }
            printf("	address=%p %d,%d = %s
", ptr[i][j], i, j, ptr[i][j]);

        }
        printf("
");
    }
    return;
}

注:

  • Never write void main in C or C++. And throw away any book that prints it.
  • The argument of malloc is usually the number of elements times the size of the element. Place special attention to the real type that you intend to use.
  • The return of malloc is usually cast to the type pointer-to-the-type-of-the-element.
  • The index in the arrays should be i and j, not row and rw.
  • Why all the *(ptr + x) stuff? That s why we have the ptr[x] syntax.
  • You probably want to use strcpy to fill your strings, but difficult to say without explaining the problem.
  • When you want to printf a pointer, use %p.
  • If you use malloc, include <stdlib.h>.
  • Prefer local variables (i, j) to global ones, particularly for loops.
  • And a few other minor changes here and there...

PS:<conio.h>? 真的? 你们是否仍在使用Turbo-C或什么?





相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签