Lecture 10 Arrays.

Slides:



Advertisements
Similar presentations
Introduction to C Programming
Advertisements

1 1-d Arrays. 2 Array Many applications require multiple data items that have common characteristics  In mathematics, we often express such groups of.
Kernighan/Ritchie: Kelley/Pohl:
Computer programming1 Arrays. Computer programming2 ARRAYS Motivation Introduction to Arrays Static arrays Arrays and Functions Arrays, Classes, and typedef.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Chapter 6 - Arrays Outline 6.1Introduction 6.2Arrays.
1 Chapter 9 Arrays and Pointers. 2  One-dimensional arrays  The Relationship between Arrays and Pointers  Pointer Arithmetic and Element Size  Passing.
Chapter 6 C Arrays Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc. and Pearson Education Inc. Arrays are data structures.
Arrays Data Structures - structured data are data organized to show the relationship among the individual elements. It usually requires a collecting mechanism.
 2007 Pearson Education, Inc. All rights reserved C Arrays.
Programming Languages -1 (Introduction to C) arrays Instructor: M.Fatih AMASYALI
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. 1 Chapter 6 - Arrays Outline 6.1Introduction 6.2Arrays.
1 1-d Arrays. 2 Array Many applications require multiple data items that have common characteristics  In mathematics, we often express such groups of.
CSEB114: PRINCIPLE OF PROGRAMMING Chapter 8: Arrays.
ARRAY Prepared by MMD, Edited by MSY1.  Introduction to arrays  Declaring arrays  Initializing arrays  Examples using arrays  Relationship with pointers.
C Lecture Notes 1 Arrays Lecture 6. C Lecture Notes 2 6.1Introduction Arrays –Structures of related data items –Static entity – same size throughout program.
Lecture 7 Introduction to Programming in C Arne Kutzner Hanyang University / Seoul Korea.
Arrays in C.
Lecturer: Omid Jafarinezhad Sharif University of Technology Department of Computer Engineering 1 Fundamental of Programming (C) Lecture 6 Array and String.
 2007 Pearson Education, Inc. All rights reserved C Arrays.
1. 1. Introduction to Array 2. Arrays of Data 3. Array Declaration 4. Array Initialization 5. Operations on Array 6. Multidimensional Arrays 7. Index.
 2008 Pearson Education, Inc. All rights reserved. 1 Arrays and Vectors.
Structuring Data: Arrays ANSI-C. Representing multiple homogenous data Problem: Input: Desired output:
UniMAP Sem2-10/11 DKT121: Fundamental of Computer Programming1 Arrays.
Chapter 8 Arrays. A First Book of ANSI C, Fourth Edition2 Introduction Atomic variable: variable whose value cannot be further subdivided into a built-in.
Prepared by MMD, Edited by MSY1 CHAPTER 4 ARRAY. Prepared by MMD, Edited by MSY2 Arrays  Introduction to arrays  Declaring arrays  Initializing arrays.
Arrays and Matrices. One-Dimensional Arrays An array is an indexed data structure All variables stored in an array are of the same data type An element.
1 Agenda Arrays: Definition Memory Examples Passing arrays to functions Multi dimensional arrays.
KUKUM-06/07 EKT120: Computer Programming 1 Week 6 Arrays-Part 1.
Arrays in C. What is Array? The variables we have used so far can store a single value. Array is a new type of variable capable of storing many values.
1-d Arrays.
Stack and Heap Memory Stack resident variables include:
EGR 2261 Unit 10 Two-dimensional Arrays
2008/11/19: Lecture 18 CMSC 104, Section 0101 John Y. Park
Hassan Khosravi / Geoffrey Tien
EKT120 : Computer Programming
Array 9/8/2018.
Lecture 7 – Arrays (1) PGT 106 : C PROGRAMMING.
INC 161 , CPE 100 Computer Programming
Module 2 Arrays and strings – example programs.
Arrays in C.
Lecture 6 C++ Programming
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Lecture Arrays.
C Arrays.
Programming and Data Structures
Chapter 6 - Arrays Outline 6.1 Introduction 6.2 Arrays
C Arrays.
7 Arrays.
EKT150 : Computer Programming
Declaration, assignment & accessing
Arrays Outline Introduction Arrays Declaring Arrays
Chapter 6 - Arrays Outline 6.1 Introduction 6.2 Arrays
Review of Arrays and Pointers
EKT120: Computer Programming
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Chapter 7 Arrays PROGRAMMING IN ANSI C.
Arrays Chapter 8 Copyright © 2008 W. W. Norton & Company.
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Arrays Week 2.
Arrays, Part 1 of 2 Topics Definition of a Data Structure
7 Arrays.
Dr Tripty Singh Arrays.
1-6 Midterm Review.
2008/11/19: Lecture 18 CMSC 104, Section 0101 John Y. Park
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Arrays and Matrices.
EECE.2160 ECE Application Programming
Arrays, Part 1 of 2 Topics Definition of a Data Structure
EECE.2160 ECE Application Programming
Presentation transcript:

Lecture 10 Arrays

Introduction Suppose, you need to store years of 100 cars. Will you define 100 variables?

Introduction Algorithms usually work on large data sets Sort a set of numbers Search a specific number in a set of numbers How to read and store a set of data? To read Repeat the scanf statement Use the loop statements To store the data Save each data in a single variable?? 3000 int variables! ! ! !

Example Write a program that get 10 number from user, then sort them. Finally write sorted numbers.

Array An ordered collection of same type variables A vector of Integers, chars, floats, … Example An array of 8 integer 0 1 2 3 4 5 6 7 3 1 5 11 10 19 12 An array of 5 chars

Arrays in C Array declaration in C <Elements’ Type> <identifier>[<size>] <Elements’ Type>: int, char, float, … <size> Old compilers (standard): it should be constant New compilers (standard): it can be variable Elements in array From 0 to (size – 1) Usage  <identifier>[index]

One-Dimensional Arrays Suppose, you need to store years of 100 cars. Will you define 100 variables? int y1, y2,…, y100; An array is an indexed data structure to represent several variables having the same data type: int y[100]; y[0] y[1] y[2] … y[k-1] y[k] y[k+1] … y[98] y[99]

One-Dimensional Arrays (cont’d) An element of an array is accessed using the array name and an index or subscript, for example: y[2] which can be used like a variable In C, the subscripts always start with 0 and increment by 1, so y[5] is the sixth element The name of the array is the address of the first element y[0] y[1] y[2] … y[k-1] y[k] y[k+1] … y[98] y[99]

Example int num[20]; num is array of 20 integers num[0] is the first integer variable num[19] is the last integer float farr[100]; farr is array of 100 floats farr[0] is the first float farr[49] is the 50th float farr[99] is the last float

Example

Array Arrays and structures are “static” entities in that they remain the same size throughout program execution.

Example int number[10]; int i, j = 3; i = 5; //-1 < i < 10 number[i + j] = 1; j = number[i]; j = number[i + 1]; j = number[i] + 1; //6th number is 0 //?? //?

Array in memory For example : int a[10]; Defines an array of ints with subscripts ranging from 0 to 9 There are 10*sizeof(int) bytes of memory reserved for this array. You can use a[0]=10; x=a[2]; a[3]=a[2]; etc. You can use scanf("%d",&a[3]); 9 8 7 6 5 4 3 2 1 10 a

Array Representation int A[3]; A[2] 0x1008 A[1] 0x1004 A[0] 0x1000 All elements of same type – homogenous Last element (index size - 1) First element (index 0) array[0] = 3; array[2] = 4; array[10] = 5; array[-1] = 6; No bounds checking!

Array-Bounds Checking C, unlike many languages, does NOT check array bounds subscripts during: Compilation (some C compilers will check literals) Runtime (bounds are never checked) It is the programmer’s responsibility to ensure that their programs are correctly written and debugged!

No Index Out of bound Checking: There is no index out of bound checking in C, for example the following program compiles fine but may produce unexpected output when run.

Using Constants to Define Arrays It is useful to define arrays using constants: #define MONTHS 12 float a [MONTHS]; What is #define advantages? We can use const instead of #define.

Initializing Arrays Initialization of arrays can be done by a comma separated list following its definition For example: int array [4] = { 100, 200, 300, 400 }; This is equivalent to: int array [4]; array[0] = 100; array[1] = 200; array[2] = 300; array[3] = 400; You can also let the compiler figure out the array size for you: int array[] = { 100, 200, 300, 400};

Array Initialization When the size if known in compile time If defined as a local variable (automatic storage class) It is not initialized to any value If defined as a global variable (external storage class) All elements are initialized to 0

Array Initialization (cont’d) Remember that objects with static storage duration will initialize to 0 if no initializer is specified:

Assigning values to an array Give a for loop to assign the below values to list list[0] list[3] list[4] list[1] list[2] 4 3 2 1

Accessing Array Elements Array elements are accessed by using an integer index. Array index starts with 0 and goes till size of array minus 1.

Array Elements An Example to show that array elements are stored at contiguous locations

Find Maximum Find maximum value in data array

Find average Find average of values in data array

Number of elements greater than average After finding the average as shown in previous slide, use the following code

} } } Find pair sum data[0]=5 pair[0]=12 data[1]=7 pair[1]=20 Find sum of every pair in data and write into pair array } data[0]=5 data[1]=7 data[2]=15 data[3]=5 … data[98]=3 data[99]=12 pair[0]=12 pair[1]=20 … pair[49]=15 } . }

solution

Randomly re-shuffle numbers 30 times data[0]=5 data[1]=7 data[2]=15 data[3]=5 … data[98]=3 data[99]=12 data[0]=12 data[1]=7 data[2]=5 data[3]=15 … data[98]=3 data[99]=5 .

solution

Reverse an array 1 2 3 4 5 6 3 1 9 7 2 2 7 9 1 3 6

Reverse an Array

Print sum of top-bottom pairs … A[49]=5 A[50]=3 A[98]=4 A[99]=5 + + + ….

} } } Group avg Suppose we have a sorted array of hundred grades. …. Grade[9] Grade[10] … Grade[19] Grade[20] Grade[90] Grade[99] Group avg } Suppose we have a sorted array of hundred grades. We want to find the average of top ten, second top ten students etc. }

Initializing Variable Length arrays

ﻭ ﺩﺮﻴﮕﺑ ﺍﺭ ﺩﺪﻋ 20 ﻪﻛ ﻱﺍﻪﻣﺎﻧﺮﺑ ﺯﺍ ﺮﺘﻜﭼﻮﻛ ﻭ ﺮﺘﮔﺭﺰﺑ ﺩﺍﺪﻋﺍ ﺩﺍﺪﻌﺗ 9 #include <stdio.h> #define SIZE 20 void main(void){ int number[SIZE]; double average; int sum, large_size, small_size, i; ﻭ ﺩﺮﻴﮕﺑ ﺍﺭ ﺩﺪﻋ 20 ﻪﻛ ﻱﺍﻪﻣﺎﻧﺮﺑ ﺯﺍ ﺮﺘﻜﭼﻮﻛ ﻭ ﺮﺘﮔﺭﺰﺑ ﺩﺍﺪﻋﺍ ﺩﺍﺪﻌﺗ .ﺪﻨﻛ ﺏﺎﺴﺣ ﺍﺭ ﻦﻴﮕﻧﺎﻴﻣ sum = large_size = small_size = 0; for(i = 0; i < SIZE; i++){ int tmp; scanf("%d", &tmp); number[i] = tmp; sum += number[i]; } average for(i = = (1.0 * sum) / SIZE; 0; i < SIZE; i++) C99 also has support for variable length arrays on the stack Also, note that the stack is usually much more limited; it's not certain you can allocate very large arrays there if(number[i] >= average) large_size++; else small_size++; printf("average = %f\n", average); printf("Small Size = %d, Large Size = %d\n", small_size, large_size); }

ﻪﺘﺷﺭ ﻚﻳ ﻭ ﺩﺍﺪﻋﺍ ﺩﺍﺪﻌﺗ ﻪﻛ ﻱﺍﻪﻣﺎﻧﺮﺑ ﻭ ﺮﺘﮔﺭﺰﺑ ﺩﺍﺪﻋﺍ ﺩﺍﺪﻌﺗ ﻭ ﺩﺮﻴﮕﺑ ﺍﺭ ﺩﺪﻋ #include <stdio.h> void main(void){ int n; printf("Enter n: ", n); scanf("%d", &n); int number[n]; double average; int sum, large_size, small_size, i; 10 ﻪﺘﺷﺭ ﻚﻳ ﻭ ﺩﺍﺪﻋﺍ ﺩﺍﺪﻌﺗ ﻪﻛ ﻱﺍﻪﻣﺎﻧﺮﺑ ﻭ ﺮﺘﮔﺭﺰﺑ ﺩﺍﺪﻋﺍ ﺩﺍﺪﻌﺗ ﻭ ﺩﺮﻴﮕﺑ ﺍﺭ ﺩﺪﻋ .ﺪﻨﻛ ﺏﺎﺴﺣ ﺍﺭ ﻦﻴﮕﻧﺎﻴﻣ ﺯﺍ ﺮﺘﻜﭼﻮﻛ sum = large_size = small_size = 0; for(i = 0; i < n; i++) scanf("%d", &(number[i])); for(i = sum average for(i = 0; i < n; i++) += number[i]; = (1.0 * sum) / n; 0; i < n; i++) if(number[i] >= average) large_size++; else small_size++; printf("average = %f\n", average); printf("Small Size = %d, Larg Size = %d\n", small_size, large_size); }

Arrays and Functions

Array Elements in Functions int number[20]; number[i] is an integer variable Array element can be used for call by value input Array element can be use for output

Arrays in Functions (cont’d) Array cannot be used as output type of function int [] f(int x, int y); //compile error Arrays can be used in input list of functions Arrays are not passed by Call By Value Arrays are passed by Call By Reference If we change array elements in a function The element is changed in the caller function

Arrays in Functions (version 1)

Exercise a[0]=3 a[1]=5 c=? 8 b= n=2 i=0 1 2 sum=0 3 8

Exercise a[0]=3 20 a[1]=5 c=? 8 b= n=2 i=0 1 2 sum=0 3 8

تابعی که یک ارایه به طول 10 را می گیرد و اعضای آن را با اعداد 0 تا 9 مقداردهی میکند. 

Array Size in Functions If array is an input parameter of a function It cannot find out the size of the array Array size should be passed from caller function to called function Using definitions

Array Size in Functions (cont’d) If array is declared in a function It knows the size of the array It can find out the size of the array using sizeof

ﻞﺤﻣ ﻭ ﺩﺮﻴﮕﺑ ﺍﺭ ﻪﻳﺍﺭﺁ ﻚﻳ ﻪﻛ ﻲﻌﺑﺎﺗ .ﺪﻧﺍﺩﺮﮔﺮﺑ ﺍﺮﻧﺁ ﻮﻀﻋ ﻦﻳﺮﺘﮔﺭﺰﺑ

Search function Liner search Binary search

Unordered list – linear search

Ordered list – linear search

Binary Search Key = 76

Binary Search

Sort function Selection Sort Bubble Sort

Selection Sort

Implementation

Bubble sort Bubble sort Several passes through the array Successive pairs of elements are compared If increasing order (or identical ), no change If decreasing order, elements exchanged Repeat

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Bubble Sort

Implementation

Merge two sorted array Assume we have A and B arrays containing sorted numbers For example A = { 3, 5, 7, 9, 12} B = {4, 5, 10} Merge these two arrays as a single sorted array C, for example C = {3, 4, 5, 5, 7, 9, 10, 12}

Solution

Intersection Set Suppose we have two sets (groups) represented by A and B E.g., A is the set of students taking Math, B is the set of students taking Science. Find set C, the intersection of A and B, i.e., students taking both Math and Science For each element ID in A Search that ID in B if found, put ID into C 3 6 9 1 7 2 4 5 8

Use arrays to represent A and B Hand example 6 3 1 9 7 2 4 2 5 6 1 8 B i=0 i=1 j=0 j=3 i=2 i=3 i=4 i=5 i=6 j=1 j=2 j=6 j=1 j=2 j=3 j=4 j=5 j=0 j=1 j=2 j=3 j=4 j=0 k=0 k=1 k=2 k=3 6 1 2 C

Solution 6 3 1 9 7 2 4 5 8

Multidimensional Arrays Arrays in C can have virtually as many dimensions as you want Definition is accomplished by adding additional subscripts when it is defined If element of an array is array itself, it will be Multidimensional array For example: int a [4] [3] ; 2-dimensional array 4 * 3 * sizeof(int) int a[4][3][2] 3-dimention array 4 * 3 * 2 * sizeof(int)

Multidimensional Arrays Representation Row 0 Row 1 Row 2 Column 0 Column 1 Column 2 Column 3 a[ 0 ][ 0 ] a[ 1 ][ 0 ] a[ 2 ][ 0 ] a[ 0 ][ 1 ] a[ 1 ][ 1 ] a[ 2 ][ 1 ] a[ 0 ][ 2 ] a[ 1 ][ 2 ] a[ 2 ][ 2 ] a[ 0 ][ 3 ] a[ 1 ][ 3 ] a[ 2 ][ 3 ] Row subscript Array name Column subscript

Examples Initialization Example: short b[ 2 ][ 2 ] = { { 1, 2 }, { 3, 4 } }; If not enough, unspecified elements set to zero short b[ 2 ][ 2 ] = { { 1 }, { 3, 4 } }; 2 1 4 3 1 4 3

Initializing Multidimensional Arrays The following initializes a[4][3]: int a[4] [3] = { {1, 2, 3} , {4, 5, 6} , {7, 8, 9} , {10, 11, 12} }; Also can be done by: int a[4] [3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; is equivalent to a[0][0] = 1; a[0][1] = 2; a[0][2] = 3; a[1][0] = 4; ... a[3][2] = 12;

Multidimensional Arrays int t[10][20]; 10x20 matrix of integers t[1][1]; //t[1,1]  compile error Integer variable in location (1,1)

Initializing Multidimensional Arrays int num[2][3] = {1, 2, 0, 3, 4 = {{1, 2, 0},{3, , 7}; 4, 7}};  num[0][2] is 0, num[1][0] is 3  num[0][2] is ?, num[1][0] is ? int num[5][3] = {{1, 2,0},{3, 4, 7}};  num[2][2] is ?, num[1][2] is ?  num[2][2] is 0, num[1][2] is 7 int num[2][3][2] = {{{1,2},{3,4},{5,6}}, {{1},{2},{3}}};  num[0][2][1] is 6, num[1][0][1] is 0  num[0][2][1] is ?, num[1][0][1] is ? int num[][2] = {{1,1},{2,2},{3,3}};  num[1][1] is ?, num[2][0] is ?  num[1][1] is 2, num[2][0] is 3

Array In Memory

Initialization j i j i 1 2 1 2 3 matrix[i][j] = j; 0 1 2 3 1 2 0 1 2 3 0 1 2 3 1 2 i j 0 1 2 3 1 2 i 1 2 1 2 3

Exercise Write the nested loop to initialize a 2D array as follow 1 2 1 2 3 4 5

An Example

Multidimensional Arrays in Functions Can be used as input of functions All dimensions except the first one must be given void func(int a[10][20][5]); Input is a 10x20x5 integer matrix void func(int a[][20][30], int size); void func(int size1, int size2, int a[size1][size2]); Input is a matrix of integers that both rows and columns are variable

Multidimensional Arrays in Functions The first subscript therefore only indicates the amount of storage that is needed when the array is declared Others are required because the computer needs to know how far along to increment the pointer for each "row"

#include <stdio.h> 37 #include <stdio.h> void displayMatrix (int nRows, int nCols, int matrix[nRows][nCols]){ int row, column; for ( row = 0; row < nRows; ++row) { for ( column = printf ("%5i", printf ("\n"); 0; column < nCols; ++column ) matrix[row][column]); } ﺲﻳﺮﺗﺎﻣ ﻚﻳ پﺎﭼ ﻱﺍﺮﺑ ﻲﻌﺑﺎﺗ } int main (void){ int sampleMatrix[3][5] = {{ 7, 16, 55, 13, 12 }, { 12, 10, 52, 0, 2, 4, 9 }}; printf ("Original matrix:\n"); displayMatrix (3, 5, sampleMatrix); 7 }, { -2, 1, }

ﺲﻳﺮﺗﺎﻣ ﻩﺩﺎﻬﻧﺍﺮﺗ ﻪﺒﺳﺎﺤﻣ #define SIZE 5 ﺲﻳﺮﺗﺎﻣ ﻩﺩﺎﻬﻧﺍﺮﺗ ﻪﺒﺳﺎﺤﻣ // Matrix Transpose void swap(int a[SIZE][SIZE], int i, int j){ int tmp; tmp = a[i][j]; a[i][j] a[j][i] = a[j][i]; = tmp; } void transpose(int a[][SIZE]){ int i, j; 0; i for(i = < SIZE; i++) for(j = i; j < SIZE; j++) swap(a, i, j); }

2-Dim Arrays as Arguments to Functions void print_m(int m[3][4], int r, int c) void print_m(int m[][4], int r, int c) { int i,j; for (i=0; i < r; i++) { for (j=0; j < c; j++) printf("%.5d ",m[i][j]); printf("\n"); } return; int i, j, matrix[3][4]; for (i=0; i<3; i++) for (j=0; j<4; j++) matrix[i][j] = i; print_m(matrix, 3, 4);

Matrix sum Compute the addition of two matrices + = 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 1 2 3 -1 3 1 3 3 3 + -1 2 4 3 1 4 2 = 6 6 3 1 1 1 -1 3 1 2 1 1 3 2 4 4 2 2 2

solution int matrix1[3][4], matrix2[3][4], sum[3][4]; // initialize matrix1 and matrix2 for (i=0; i<3; i++) for (j=0; j<4; j++) sum[i][j]= matrix1[i][j]+matrix2[i][j];

Exchange Two Rows 4 6 2 5 3 8 1 4 6 2 1 8 5 3

Transpose 1 5 3 4 2 6 1 4 5 2 3 6 void transpose(int a[NROWS][NCOLS], int b[NCOLS][NROWS]) { /* Declare Variables. */ int i, j; /* Transfer values to the transpose matrix. */ for(i=0; i<NROWS; i++) { for(j=0; j<NCOLS; j++) { b[j][i] = a[i][j]; } return; a 1 5 3 4 2 6 b 1 4 5 2 3 6

Matrix multiplication double a[3][2], b[2][4], c[3][4]; Find c = a * b; 3 4 5 2 1 6 22 29 45 35 18 40 47 21 26 33 43 49 2 3 7 1 4 5 6 8 = x 3*2 + 4*4=22 3*3 + 4*5=29 3*7 + 4*6=45 3*1 + 4*8=35 5*2 + 2*4=18 5*3 + 2*5=40 5*7 + 2*6=47 5*1 + 2*8=21 1*2 + 6*4=26 1*3 + 6*5=33 1*7 + 6*6=43 1*1 + 6*8=49

Matrix Multiplication cont’d j j 0 1 2 3 0 1 2 3 22 29 45 35 18 40 47 21 26 33 43 49 3 4 5 2 1 6 1 2 1 2 2 3 7 1 4 5 6 8 = x i i j=0 c[i][j] = a[i][k=0]*b[k=0][j] + a[i][k=1]*b[k=1][j] 2 4 3 4 k = i=0 x k

Matrix Multiplication cont’d #define N 3 #define M 2 #define L 4 void matrix_mul(a[N][M], int b[M][L], int c[N][L]) { int i, j, k; for(i=0; i < N; i++) { for(j=0; j < L; j++) { c[i][j] = 0; for(k=0; k < M; k++) { c[i][j] = c[i][j] + a[i][k] * b[k][j]; } return;

Common Bugs & Avoiding them You cannot assign a value to array int a[4], b[4]; a = b; // Error Each array name refers to a constant pointer. Can’t change where the array name refers to But you can change the array elements, via pointer arithmetic (int []) ??? (int) ??? (int) ??? (int) ??? (int) int m[4]; m