Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7512435
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 29, 20262026-05-29T23:52:10+00:00 2026-05-29T23:52:10+00:00

I’m not an expert on lower-level non-object-oriented programming languages, and I’m in the middle

  • 0

I’m not an expert on lower-level non-object-oriented programming languages, and I’m in the middle of writing some C code for a project at work. I’m trying to create some decent abstract data types to work with, and Googling around made me realize that people use struct-based ADT’s in two ways. Some people define a data type as a struct:

typedef struct adt {
    //content here
} adt;

and expose it to the world in the header file.

Others define a data type as a pointer to struct:

// In .c file:
typedef struct adt_s {
    //content here
} adt_s, *adt;


// In .h file:
typedef struct adt_s *adt;

I understand that this approach allows you to typedef a struct without giving the outside world any knowledge of what’s inside this struct, so programmers can only use functions supplied in the same header file to operate on this data type.

Are there an other reasons to pick on over the other? Is there a general “rule of thumb” for when the define ADT’s as structs and when do we define them as pointers to structs?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-29T23:52:11+00:00Added an answer on May 29, 2026 at 11:52 pm

    You can forward declare a struct without typedef too – the only distinctions are:

    • whether the interface looks cleaner with or without the keyword struct
    • whether the interface looks cleaner with or without the explicit pointer *

    Eg.

    struct S1;
    typedef struct S2 S2;
    typedef struct S3_s *S3;
    
    void foo1(struct S1 *arg);
    void foo2(S2 *arg);
    void foo3(S3);
    

    Obviously this only applies for forward-declared structures in an interface header.

    If you’re not hiding the structure implementation in the first place, choosing between S1 and S2 is a matter of preference (or consistency). I wouldn’t use S3 unless it’s a really opaque/hidden type.

    Personal preference would be to use S1 (explicit struct keyword) for big/complex aggregates, and S2 for small structs you might treat like values and not always pass by pointer. YMMV.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have just tried to save a simple *.rtf file with some websites and
For some reason, after submitting a string like this Jack’s Spindle from a text
link Im having trouble converting the html entites into html characters, (&# 8217;) i
I'm parsing an RSS feed that has an ’ in it. SimpleXML turns this
I have this code: - (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock { NSString *someString = [[NSString
I need a function that will clean a strings' special characters. I do NOT
i got an object with contents of html markup in it, for example: string
I am writing an app with both english and french support. The app requests
Is it possible to replace javascript w/ HTML if JavaScript is not enabled on
I have a string like this: La Torre Eiffel paragonata all’Everest What PHP function

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.