C

C programing


How to C

Basics

C uses a simple syntax with curly braces , semicolons ;, and main() as the entry point. Variables must be declared before use, and there is no default initialization.

int main() {
    int x = 10;          // Variable declaration
    printf("%d", x);     // Output: 10
    return 0;            // Return statement
}

Memory Management

C requires manual memory management. Use malloc or calloc to allocate memory and free to release it. Avoid dangling pointers and memory leaks.

int* arr = (int*)malloc(10 * sizeof(int)); // Allocate memory
if (arr == NULL) { /* Handle allocation failure */ }
free(arr); // Free memory

Strings

Strings in C are arrays of char terminated by \0. Use functions from <string.h> like strlen, strcpy, and strcat.

char str[] = "Hello";
printf("%d", strlen(str)); // Output: 5

Pointers

Pointers store memory addresses. Use * to dereference and & to get the address of a variable. Pointer arithmetic is based on the size of the type.

int x = 10;
int* ptr = &x; // Pointer to x
printf("%d", *ptr); // Output: 10

Preprocessor Directives

Use #define for macros and #include to include headers. Use include guards to prevent double inclusion.

#ifndef MY_HEADER_H
#define MY_HEADER_H
// Declarations go here
#endif

Functions

Functions must be declared before use. Use function prototypes in headers. Arguments are passed by value; use pointers for pass-by-reference.

int add(int a, int b) {
    return a + b;
}

Arrays

Arrays in C are fixed-size by default. Use malloc and realloc for dynamic arrays. Be careful with out-of-bounds access.

int arr[10]; // Fixed-size array
int* dynArr = (int*)malloc(10 * sizeof(int)); // Dynamic array

Structs

Structs group related data. Use . to access members of instances and -> for pointers to structs.

struct Point {
    int x, y;
};

struct Point p1 = {10, 20};
printf("%d", p1.x); // Output: 10

Control Flow

Use if, else, switch for conditionals and for, while, do-while for loops.

int x = 10;
if (x > 5) {
    printf("x is greater than 5");
}

Error Handling

C uses error codes and errno for error handling. Always check return values of functions.

FILE* file = fopen("file.txt", "r");
if (file == NULL) {
    perror("Error opening file");
}

File I/O

Use FILE* and functions like fopen, fclose, fread, and fwrite for file operations.

FILE* file = fopen("file.txt", "w");
fprintf(file, "Hello, World!");
fclose(file);

Libraries

C provides standard libraries like <stdio.h>, <stdlib.h>, and <string.h>. Use header files for custom libraries.

#include <stdio.h>
#include "mylib.h"

Quirks and Tweaks

C has no boolean type (pre-C99), no namespaces, and weak const enforcement. Use void* for generics.

#define TRUE 1
#define FALSE 0

Common Pitfalls

Avoid uninitialized variables, memory leaks, buffer overflows, and dangling pointers.

int* ptr = (int*)malloc(sizeof(int));
if (ptr != NULL) {
    *ptr = 10;
    free(ptr); // Avoid memory leaks
}

C Basics

Data Types

// 🔹 Basic Data Types
int num = 10;       // Integer
float decimal = 10.5;  // Floating point number
char letter = 'A';  // Character
double precise = 10.123456;  // Double precision float
_Bool flag = 1;  // Boolean (C99)

// 🔹 Void Type
void functionName();  // Function returning nothing

// 🔹 Derived Data Types
int arr[5];  // Array
struct Student { char name[50]; int age; };  // Structure
union Data { int x; float y; };  // Union
typedef unsigned int uint;  // Typedef alias

Operators

// 🔹 Arithmetic Operators: +, -, *, /, %
int sum = a + b;

// 🔹 Relational Operators: ==, !=, >, <, >=, <=
if (x == y) { ... }

// 🔹 Logical Operators: &&, ||, !
if (a > 0 && b < 10) { ... }

// 🔹 Bitwise Operators: &, |, ^, ~, <<, >>
int result = a & b;

// 🔹 Assignment Operators: =, +=, -=, *=, /=
x += 10;  // x = x + 10;

// 🔹 Ternary Operator
int min = (a < b) ? a : b;

Input & Output

// 🔹 Standard Input & Output
printf("Enter a number: ");
scanf("%d", &num);

// 🔹 Character Input & Output
char ch = getchar();
putchar(ch);

// 🔹 String Input & Output
char name[50];
gets(name);
puts(name);

Control Flow

Conditionals

// 🔹 If-Else Statement
if (score > 90) {
    grade = 'A';
} else if (score > 75) {
    grade = 'B';
} else {
    grade = 'C';
}

// 🔹 Switch Case
switch(day) {
    case 1: printf("Monday"); break;
    case 2: printf("Tuesday"); break;
    default: printf("Unknown"); break;
}

Loops

// 🔹 For Loop
for (int i = 0; i < 5; i++) {
    printf("%d ", i);
}

// 🔹 While Loop
int i = 0;
while (i < 5) {
    printf("%d ", i);
    i++;
}

// 🔹 Do-While Loop
int i = 0;
do {
    printf("%d ", i);
    i++;
} while (i < 5);

Jump Statements

// 🔹 Break and Continue
for (int i = 0; i < 10; i++) {
    if (i == 5) break;  // Exit loop
    if (i == 3) continue;  // Skip iteration
    printf("%d ", i);
}

// 🔹 Goto Statement
start:
printf("Hello ");
goto end;
printf("This won't be printed.");
end:
printf("World!");

Functions

Function Basics

// 🔹 Function Declaration & Definition
void greet() {
    printf("Hello, World!");
}

// 🔹 Function Call
greet();

// 🔹 Function with Parameters
int sum(int a, int b) {
    return a + b;
}

// 🔹 Call by Value vs Call by Reference
void modify(int *ptr) {
    *ptr = 100;  // Modifies actual variable
}

Recursion

// 🔹 Recursive Function Example
int factorial(int n) {
    if (n == 0) return 1;
    return n * factorial(n - 1);
}

Arrays & Strings

Arrays

// 🔹 One-Dimensional Array
int arr[5] = {1, 2, 3, 4, 5};

// 🔹 Multi-Dimensional Array
int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

Strings

// 🔹 String Basics
char str[] = "Hello";
printf("%s", str);

// 🔹 String Functions
strlen(str);
strcpy(dest, src);
strcmp(str1, str2);
strcat(str1, str2);

Pointers

Pointer Basics

// 🔹 Pointer Declaration
int *ptr;
ptr = &num;  // Stores address of num

// 🔹 Dereferencing Pointer
int value = *ptr;  // Access value at pointer address

// 🔹 Pointer Arithmetic
ptr++;  // Moves to next memory location

Dynamic Memory

// 🔹 Dynamic Memory Allocation
int *ptr = (int*)malloc(sizeof(int));
free(ptr);  // Free allocated memory

Structures & Unions

Structures

// 🔹 Defining a Structure
struct Student {
    char name[50];
    int age;
};

// 🔹 Accessing Structure Members
struct Student s1;
s1.age = 20;

Unions

// 🔹 Defining a Union
union Data {
    int x;
    float y;
};

union Data d;
d.x = 10;

File Handling

File Operations

// 🔹 File Handling Basics
FILE *fp;
fp = fopen("file.txt", "w");
fprintf(fp, "Hello, File!");
fclose(fp);

Why Solo Dev?

This reference website is not for beginners
Solo Dev is strictly for devs who already know the game and need a beautiful cheat sheet on their second monitor which looks better than GeeksforGeeks


this portion goes away when you shrink the screen ;)

Our popular languages: