C Passing Arrays to Functions

When you pass an array to a function, C passes the memory address of the first element (pointer), not a copy of the entire array. The function can modify the original array.


Basic Syntax

// Method 1: Using array syntax
returnType functionName(type arrayName[], int size);
// Method 2: Using pointer syntax
returnType functionName(type *arrayName, int size);

Both methods are identical. The array "decays" to a pointer.


Example 1: Print Array Elements

#include <stdio.h>
// Receives array as parameter
void printArray(int arr[], int size) {
for(int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int numbers[] = {10, 20, 30, 40, 50};
int size = sizeof(numbers) / sizeof(numbers[0]);
printArray(numbers, size);  // Pass array name (address)
return 0;
}

Output:

10 20 30 40 50

Example 2: Modify Array Inside Function

#include <stdio.h>
// Function modifies the original array
void doubleValues(int arr[], int size) {
for(int i = 0; i < size; i++) {
arr[i] = arr[i] * 2;  // Changes reflect in main
}
}
void printArray(int arr[], int size) {
for(int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int numbers[] = {1, 2, 3, 4, 5};
int size = 5;
printf("Before: ");
printArray(numbers, size);
doubleValues(numbers, size);
printf("After:  ");
printArray(numbers, size);
return 0;
}

Output:

Before: 1 2 3 4 5
After:  2 4 6 8 10

Example 3: Calculate Sum (Returning Value)

#include <stdio.h>
int calculateSum(int arr[], int size) {
int sum = 0;
for(int i = 0; i < size; i++) {
sum += arr[i];
}
return sum;
}
float calculateAverage(int arr[], int size) {
int sum = calculateSum(arr, size);
return (float)sum / size;
}
int main() {
int scores[] = {85, 90, 78, 92, 88};
int size = 5;
int total = calculateSum(scores, size);
float avg = calculateAverage(scores, size);
printf("Sum: %d\n", total);
printf("Average: %.2f\n", avg);
return 0;
}

Output:

Sum: 433
Average: 86.60

Example 4: Find Max and Min

#include <stdio.h>
int findMax(int arr[], int size) {
int max = arr[0];
for(int i = 1; i < size; i++) {
if(arr[i] > max) {
max = arr[i];
}
}
return max;
}
int findMin(int arr[], int size) {
int min = arr[0];
for(int i = 1; i < size; i++) {
if(arr[i] < min) {
min = arr[i];
}
}
return min;
}
int main() {
int numbers[] = {45, 12, 89, 34, 67, 23, 99, 11};
int size = sizeof(numbers) / sizeof(numbers[0]);
printf("Maximum: %d\n", findMax(numbers, size));
printf("Minimum: %d\n", findMin(numbers, size));
return 0;
}

Output:

Maximum: 99
Minimum: 11

Example 5: Passing Array with Pointer Syntax

#include <stdio.h>
// Using pointer syntax (same as array syntax)
void reverseArray(int *arr, int size) {
for(int i = 0; i < size / 2; i++) {
int temp = arr[i];
arr[i] = arr[size - 1 - i];
arr[size - 1 - i] = temp;
}
}
void printArray(int *arr, int size) {
for(int i = 0; i < size; i++) {
printf("%d ", arr[i]);  // Can use arr[i] or *(arr+i)
}
printf("\n");
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6};
int size = 6;
printf("Original: ");
printArray(arr, size);
reverseArray(arr, size);
printf("Reversed: ");
printArray(arr, size);
return 0;
}

Output:

Original: 1 2 3 4 5 6
Reversed: 6 5 4 3 2 1

Example 6: Passing 2D Array

#include <stdio.h>
// For 2D arrays, must specify column size
void printMatrix(int rows, int cols, int matrix[][3]) {
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cols; j++) {
printf("%3d ", matrix[i][j]);
}
printf("\n");
}
}
void multiplyByScalar(int rows, int cols, int matrix[][3], int scalar) {
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cols; j++) {
matrix[i][j] *= scalar;
}
}
}
int main() {
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
printf("Original matrix:\n");
printMatrix(2, 3, matrix);
multiplyByScalar(2, 3, matrix, 2);
printf("\nAfter multiplying by 2:\n");
printMatrix(2, 3, matrix);
return 0;
}

Output:

Original matrix:
1   2   3
4   5   6
After multiplying by 2:
2   4   6
8  10  12

Size Matters: Passing Size Separately

#include <stdio.h>
// You CANNOT get size inside function like this:
void badFunction(int arr[]) {
// sizeof(arr) returns pointer size (8 bytes), NOT array size!
int size = sizeof(arr) / sizeof(arr[0]);  // WRONG!
printf("Inside function size: %lu\n", sizeof(arr));
}
// Always pass size as separate parameter
void goodFunction(int arr[], int size) {
printf("Array elements: ");
for(int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int numbers[] = {10, 20, 30, 40, 50};
int size = sizeof(numbers) / sizeof(numbers[0]);
printf("In main, array size: %lu bytes\n", sizeof(numbers));
printf("In main, number of elements: %d\n", size);
badFunction(numbers);
goodFunction(numbers, size);
return 0;
}

Output:

In main, array size: 20 bytes
In main, number of elements: 5
Inside function size: 8
Array elements: 10 20 30 40 50

Comparison Table

Passing MethodSyntaxModifies Original?Size Info
Array syntaxfunc(int arr[], int size)YesNeeds separate param
Pointer syntaxfunc(int *arr, int size)YesNeeds separate param
Fixed size arrayfunc(int arr[10])YesFixed, but only first dimension
2D arrayfunc(int arr[][col], int col)YesColumn size required

Key Rules

RuleExplanation
Arrays are passed by referenceFunction receives address, not copy
Original array gets modifiedChanges inside function affect original
Size is lostAlways pass size as separate parameter
Square brackets vs pointerint arr[] = int *arr (identical)
2D arrays need column sizefunc(int arr[][5]) or func(int (*arr)[5])

Common Mistakes

// ❌ WRONG - Forgetting size parameter
void printArray(int arr[]) {
// Cannot know how big arr is
}
// ✅ CORRECT - Always pass size
void printArray(int arr[], int size) {
for(int i = 0; i < size; i++)
printf("%d ", arr[i]);
}
// ❌ WRONG - Trying to return local array
int* badFunction() {
int arr[] = {1, 2, 3};
return arr;  // arr dies after function ends
}
// ✅ CORRECT - Modify array passed as parameter
void goodFunction(int arr[], int size) {
// Modify arr directly
arr[0] = 100;
}

Quick Summary

OperationCodeNotes
Pass 1D arrayfunc(arr, size)Pass name and size
Receive 1D arrayvoid func(int arr[], int size)Use empty brackets
Pass 2D arrayfunc(matrix, rows, cols)Pass with dimensions
Receive 2D arrayvoid func(int mat[][cols], int rows, int cols)Specify column size
Array decays to pointerint *arr = int arr[]Both are equivalent
Can't get size insideUse sizeof(arr) in main onlyPass as parameter

Complete C Programming Guide + Compilers Collection


1. C srand() Function – Understanding Seed Initialization

https://macronepal.com/understanding-the-c-srand-function
Explains how srand() initializes the pseudo-random number generator in C by setting a seed value. Using the same seed produces the same sequence, while time(NULL) gives different results each run.


2. C rand() Function Mechanics and Limitations

https://macronepal.com/c-rand-function-mechanics-and-limitations
Explains how rand() generates pseudo-random numbers between 0 and RAND_MAX, its deterministic nature, and limitations for security use cases.


3. C log() Function

https://macronepal.com/c-log-function-2
Covers natural logarithm calculation using <math.h> and its applications.


4. Mastering Date and Time in C

https://macronepal.com/mastering-date-and-time-in-c
Explains <time.h> functions like time(), clock(), difftime(), and struct tm.


5. Mastering time_t Type in C

https://macronepal.com/mastering-the-c-time_t-type-for-time-management
Explains time representation as seconds since Unix epoch and conversion functions.


6. C exp() Function

https://macronepal.com/c-exp-function-mechanics-and-implementation
Explains exponential function exp(x) and its scientific applications.


7. C log() Function (Alternate Guide)

https://macronepal.com/c-log-function
Comparison of log() and log10() with usage examples.


8. C log10() Function

https://macronepal.com/mastering-the-log10-function-in-c
Explains base-10 logarithm for engineering and scientific applications.


9. C tan() Function

https://macronepal.com/understanding-the-c-tan-function
Explains tangent function and radian-based calculations.


10. Random Numbers in C (Secure vs Predictable)

https://macronepal.com/mastering-c-random-numbers-for-secure-and-predictable-applications
Explains difference between rand() and secure randomness methods.


11. Free Online C Compiler

https://macronepal.com/free-online-c-code-compiler-2
Browser-based compiler for testing C programs instantly.


C Functions, Arguments, Parameters & Flow

Mastering Functions in C – Complete Guide

https://macronepal.com/c/mastering-functions-in-c-a-complete-guide/
Covers function structure, modular programming, and real-world usage.


Function Arguments in C

https://macronepal.com/c-function-arguments/
Explains how arguments are passed and used in function calls.


Function Parameters in C

https://macronepal.com/c-function-parameters/
Explains defining inputs for functions and matching them with arguments.


Function Declarations in C

https://macronepal.com/c-function-declarations-syntax-rules-and-best-practices/
Covers prototypes, syntax rules, and best practices.


Function Calls in C

https://macronepal.com/understanding-function-calls-in-c-syntax-mechanics-and-best-practices/
Explains execution flow and parameter handling during function calls.


Void Functions in C

https://macronepal.com/understanding-void-functions-in-c-syntax-patterns-and-best-practices/
Explains functions that do not return values.


Return Values in C

https://macronepal.com/c-return-values-mechanics-types-and-best-practices/
Explains different return types and how functions return results.


Pass-by-Value in C

https://macronepal.com/aws/understanding-pass-by-value-in-c-mechanics-implications-and-best-practices/
Explains how copies of variables are passed into functions.


Pass-by-Reference in C

https://macronepal.com/c/understanding-pass-by-reference-in-c-pointers-semantics-and-safe-practices/
Explains using pointers to modify original variables.


C strstr() Function

https://macronepal.com/aws/c-strstr-function/
Explains substring search inside strings in C.


C Preprocessor & Macros

https://macronepal.com/mastering-c-variadic-macros-for-flexible-debugging/
https://macronepal.com/mastering-the-stdc-macro-in-c/
https://macronepal.com/c-time-macro-mechanics-and-usage/
https://macronepal.com/understanding-the-c-date-macro/
https://macronepal.com/c-file-type/
https://macronepal.com/mastering-c-line-macro-for-debugging-and-diagnostics/
https://macronepal.com/mastering-predefined-macros-in-c/
https://macronepal.com/c-error-directive-mechanics-and-usage/
https://macronepal.com/understanding-the-c-pragma-directive/
https://macronepal.com/c-include-directive/


C Structures, Memory, Scope & Linkage

https://macronepal.com/mastering-structures-in-c/
https://macronepal.com/c-structure-declaration-mechanics-and-usage/
https://macronepal.com/c-structure-initialization-mechanics-and-best-practices/
https://macronepal.com/mastering-c-structure-member-access-for-reliable-data-handling/
https://macronepal.com/c-nested-structures/
https://macronepal.com/mastering-arrays-of-structures-in-c/
https://macronepal.com/c-structure-pointers-mechanics-and-implementation/
https://macronepal.com/understanding-c-structure-parameter-passing-mechanics/
https://macronepal.com/mastering-c-returning-structures-for-efficient-data-flow/
https://macronepal.com/c-self-referential-structures/
https://macronepal.com/mastering-structure-alignment-in-c/
https://macronepal.com/c-structure-padding-mechanics-and-optimization/
https://macronepal.com/understanding-c-flexible-array-members-mechanics-and-usage/
https://macronepal.com/mastering-c-anonymous-structures-for-flattened-data-layouts/
https://macronepal.com/c-unions/
https://macronepal.com/mastering-c-name-mangling-and-symbol-decoration/
https://macronepal.com/c-no-linkage-mechanics-and-scope-isolation/
https://macronepal.com/understanding-c-internal-linkage-mechanics-and-architecture/


C Scope, Storage Classes & Typedef

https://macronepal.com/mastering-function-prototype-scope-in-c/
https://macronepal.com/c-function-scope-mechanics-and-visibility/
https://macronepal.com/understanding-c-file-scope-mechanics-and-architecture/
https://macronepal.com/mastering-c-scope-rules-for-predictable-name-resolution/
https://macronepal.com/c-scope-rules/
https://macronepal.com/mastering-c-register-storage-class-for-historical-context-and-modern-alternatives/
https://macronepal.com/mastering-_thread_local-in-c/
https://macronepal.com/c-extern-storage-class-mechanics-and-usage/
https://macronepal.com/understanding-the-c-static-storage-class-mechanics-and-usage/
https://macronepal.com/c-auto-storage-class/
https://macronepal.com/c-typedef-with-pointers/


Extra Articles

https://macronepal.com/13757-2/
https://macronepal.com/13748-2/
https://macronepal.com/13747-2/
https://macronepal.com/13746-2/
https://macronepal.com/13745-2/
https://macronepal.com/13708-2/
https://macronepal.com/13707-2/
https://macronepal.com/13702-2/


Online Compilers

https://macronepal.com/free-html-online-code-compiler/
https://macronepal.com/free-online-python-code-compiler/
https://macronepal.com/free-online-python2-code-compiler/
https://macronepal.com/free-online-java-code-compiler/
https://macronepal.com/free-online-javascript-code-compiler/
https://macronepal.com/free-online-node-js-code-compiler/
https://macronepal.com/free-online-c-code-compiler/
https://macronepal.com/free-online-c-code-compiler-2/
https://macronepal.com/free-online-c-code-compiler-3/
https://macronepal.com/free-online-php-code-compiler/
https://macronepal.com/free-online-ruby-code-compiler/
https://macronepal.com/free-online-perl-code-compiler/
https://macronepal.com/free-online-lua-code-compiler/
https://macronepal.com/free-online-tcl-code-compiler/
https://macronepal.com/free-online-groovy-code-compiler/
https://macronepal.com/free-online-j-shell-code-compiler/
https://macronepal.com/free-online-haskell-code-compiler/
https://macronepal.com/free-online-scala-code-compiler/
https://macronepal.com/free-online-common-lisp-code-compiler/
https://macronepal.com/free-online-d-code-compiler/
https://macronepal.com/free-online-ada-code-compiler/
https://macronepal.com/free-erlang-code-compiler/
https://macronepal.com/free-online-assembly-code-compiler/

Complete Guide to Core & Advanced C Programming Concepts (Functions, Strings, Arrays, Loops, I/O, Control Flow)

https://macronepal.com/bash/building-blocks-of-c-a-complete-guide-to-functions/
Explains how functions in C work as reusable blocks of code, including declaration, definition, parameters, return values, and modular programming structure.

https://macronepal.com/bash/the-heart-of-text-processing-a-complete-guide-to-strings-in-c-2/
Explains how strings are handled in C using character arrays, string manipulation techniques, and common library functions for text processing.

https://macronepal.com/bash/the-cornerstone-of-data-organization-a-complete-guide-to-arrays-in-c/
Explains arrays in C as structured memory storage for multiple values, including indexing, initialization, and efficient data organization.

https://macronepal.com/bash/guaranteed-execution-a-complete-guide-to-the-do-while-loop-in-c/
Explains the do-while loop in C, where the loop body executes at least once before checking the condition.

https://macronepal.com/bash/mastering-iteration-a-complete-guide-to-the-for-loop-in-c/
Explains the for loop in C, including initialization, condition checking, and increment/decrement for controlled iteration.

https://macronepal.com/bash/mastering-iteration-a-complete-guide-to-while-loops-in-c/
Explains the while loop in C, focusing on condition-based repetition and proper loop control mechanisms.

https://macronepal.com/bash/beyond-if-else-a-complete-guide-to-switch-case-in-c/
Explains switch-case statements in C, enabling multi-branch decision-making based on variable values.

https://macronepal.com/bash/mastering-conditional-logic-a-complete-guide-to-if-else-statements-in-c/
Explains if-else statements in C for decision-making and controlling program flow based on conditions.

https://macronepal.com/bash/mastering-the-fundamentals-a-complete-guide-to-arithmetic-operations-in-c/
Explains arithmetic operations in C such as addition, subtraction, multiplication, division, and operator precedence.

https://macronepal.com/bash/foundation-of-c-programming-a-complete-guide-to-basic-input-output/
Explains basic input and output in C using scanf and printf for interacting with users and displaying results.

Online C Code Compiler
https://macronepal.com/free-online-c-code-compiler-2/

Leave a Reply

Your email address will not be published. Required fields are marked *


Macro Nepal Helper