Skip to main content

C pointers,structs,unions


char* p
-address to single char value / first in array
char* argv[]
-array of type char* with unknown
char** argv
-address to the first element of an array of type char*
int** data
1. Pointer to pointer to single int value
2. Array of addresses that point to single int
3. Address that points to one array of int values
4. Array of addresses that point to arrays of int values

Sizeof(void*) returns size of address
Include limits.h for supporting max and min values with TYPE_MAX/MIN

Const avoids value being modified, would be illegal if attempting to change so

Enums - maps to int, associates name with value
enum month_name{

Struct date{       //date is the tag
enum day_name day;
Int   day_num;
Enum month_name month;
Int                year;
} Big_Day { //declaration
Mon,7,Jan,1980  //initialization

Function arguments/returns for structs
Struct cus s1;
Struct sal s2;

Struct sale transact(struct cus s1,struct sal s2){
Return s1;

Struct date deadline = {day_undef,1,Jan,2000};
Struct date* mydate = &deadline;

typedef struct date{
Enum day_name     day;
Int            day_num;
Enum month_name month;
Int                year;

Memory alignment
The max width of the struct depends on the longest
The padding pattern depends on the order of variables
Address of struct give access to first member
Alignment also depends on architecture, compiler extensions can be used to prevent padding

Variants of structs use same memory
Accessing of elements of union uses same notation as struct
If variants exist in union, eg. Book and film example, use separate variable to indicate which variant in use


Popular posts from this blog

Understanding database [9] : Choosing indexes

Understanding database 9 : Choosing indexes When choosing indexes, we choose the best plan that suits for the queries, and look for additional indexes that may potentially upgrade upon that. Before creating, we must also consider the impact on updates in the workload, such that indexes take disk space. For a query, the WHERE clause are the main focus point to make indexes on, where exact matches suggest a hash index and range queries suggest a tree index. Clustering is extremely helpful when it comes to range queries, and may also help with equality queries if there are duplicates. Search keys with multiple attribute should be considered if a WHERE clause contains multiple conditions, and the order of attributes is important for range queries. Searching may become ‘index-only’ with such indexes.

Understanding database [6] : Clustered Index

A clustered index is what is good for a range search over a range of search key values, and the index entries and the rows are ordered the same way, which is different from unclustered indexes (secondary indexes). To use a clustered index, we use the index to locate the first index entry at the start of the range, which where the first row is located at. If the index is clustered, subsequent rows will be stored in successive locations with the ordering , therefore it may minimize the page transfers and maximizes cache hits. For one table, there may only be one clustered index, whereas there can be as many unclustered indexes as you may want  to create. Unclustered indexes aren ’ t as good as clustered, but they might become necessary when it comes to finding for other attributes apart from the primary key. Smaller topics : Dense index & Sparse index When we say sparse index, we mean that there is an index entry for each page of the data file. With this structuring