6
.
.
. .
, , . (), "" () . .
() . ( ). , Arr , i - (0 i < 10) : *(Arr + i). Arr , i . (Arr + i) i - , ( *) .
.
: , . .
, , Arr 10 :
int Arr[10];
ptr, Arr:
int *ptr;
( int) .
, ptr ( ) Arr, :
ptr = Arr;
:
ptr = &Arr[0];
.
: char, float, double .
ptr ( ) Arr, :
ptr = &Arr[1];
ptr += 1;
, *(ptr+1) , Arr[1].
ptr += n;
*ptr , n , , , . , n .
"++" "". , , .
|
|
. ">", ">=", "!=", "==", "<=", "<". NULL, . NULL -, , . - . .
, .
char:
char *ptr = "hello, world";
*ptr , . "hello, world" *ptr. , . , , . . , . , , "hello, world" , *ptr .
, , . .
:
*_ [];
*_ [ ] = ;
*_ [] = ;
, ;
_ , ;
, ;
(.. ).
:
int data[7]; //
int *pd[7]; //
int *pi[ ] = { &data[0], &data[4], &data[2] };
pd pi int.
pd[j] pi[k] int. 6 pd . pi , data.
, , , . . , , . , .. . , .
. , .
|
|
char *ptr[ ] = {
"Surname", //
"Name", //
"group", //
"ACOUY" //
};
. () .
, . . :
int **ptr2;
**ptr2 int. , . :
int x = 88, *ptr, **ptr2;
ptr = &x;
ptr2 = &ptr;
printf("%d", **ptr2);
( ) 88. *ptr , **ptr2 . , ( 88), **ptr2.
. 3 5, .. 3 5 , :
int M[3][5]= {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
int *ptr;
( ) :
M[0][0], M[0][1], M[0][2], M[0][3], M[0][4], M[1][0], M[1][1], M[1][2], M[1][3], M[1][4],
M[2][0], M[2][1], M[2][2], M[2][3], M[2][4].
, , . , 5 .
. :
ptr == &M[0][0]; //?1- , 1-
ptr + 1 == &M[0][1]; // 1- , 2-
ptr + 2 == &M[0][2]; // 1- , 3-
ptr + 3 == &M[0][3]; // 1- , 4-
ptr + 4 == &M[0][4]; // 1- , 5-
ptr + 5 == &M[1][0]; // 2- , 1-
ptr + 6 == &M[1][1]; // 2- , 2-
ptr + 7 == &M[1][2]; // 2- , 3-
ptr + 8 == &M[1][3]; // 2- , 4-
ptr + 9 == &M[1][4]; // 2- , 5-
ptr + 10 == &M[2][0]; // 3- , 1-
ptr + 11 == &M[2][1]; // 3- , 2-
ptr + 12 == &M[2][2]; // 3- , 3-
ptr + 13 == &M[2][3]; // 3- , 4-
ptr + 14 == &M[2][4]; // 3- , 5-
, , , , :
ptr = &M[0][0];
*(ptr + i*n + j);
i , j , n .
1. .
:
#include <stdio.h>#include <conio.h> int main (void){ int i, n; char *ptr[ ] = {"one", "two", "three", "four", "five",\ "six", "seven", "eight", "nine", "ten"}; n = sizeof(ptr)/sizeof(ptr[0]); printf("\n\t Strings of various length:\n"); for (i = 0; i < n; ++i) printf("\n%12d) %s", i+1, ptr[i]); printf("\n\n Press any key: "); _getch(); return 0;}. printf() %s . , . "\" ( ). sizeof() . , , .
|
|
. , , , , .
. 8.1.
. 8.1.
1
1. .
2. .
3. , , , , , .
4. , .
5. for while.
2. , 10 [8; 8], .
:
#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <time.h> #define N 10 int main (void) { double a = -8.0, b = 8.0; double arr[N], *pmin[N], *temp; int i, j; long int T; T = (long)time(NULL); // srand((unsigned int) T); // for(i = 0; i < N; ++i) arr[i] = a + (b - a)*(double)rand()/RAND_MAX; printf("\n\t The initial array of [%1.4f, %1.4f]:\n", a, b); for (i = 0; i < N; ++i) printf("\n\t%2d) %8.4f", i+1, arr[i]); // // , for (i = 0; i < N; ++i) pmin[i] = &arr[i]; // for (i = 0; i < N-1; ++i) for (j = i+1; j < N; ++j) { if (*pmin[i] < *pmin[j]) {temp = pmin[i];pmin[i] = pmin[j]; pmin[j] = temp; }} // printf("\n\n\t Assorted array of descending:\n");for (i = 0; i < N; ++i)printf("\n\t%2d) %8.4f", i+1, *pmin[i]); printf("\n\n Press any key: "); _getch(); return 0; }, , .. , .
. 8.2.
. 8.2.
2
1. .
2. . : [8; 2*X], , .
3. N , N . . .
3. .
|
|
:
#include <stdio.h>#include <conio.h> #define n 15 int main(void) {int i = 1, I, j, k, p = n/2; int M[n][n], *ptr[n*n]; // for (I = 0; I < n; ++I)for (j = 0; j < n; ++j){ M[I][j] = 0; ptr[I*n + j] = &M[I][j];} for (k = 1; k <= p; k++) // {// for (j = (k-1); j < (n-k+1); j++)*ptr[(k-1)*n + j] = i++; // for (j = k; j < (n-k+1); j++) *ptr[j*n + (n-k)] = i++; // for (j = (n-k-1); j >= (k-1); --j) *ptr[(n-k)*n + j] = i++; // for (j = (n-k-1); j >= k; j--) *ptr[j*n + (k-1)] = i++; }if (n % 2) *ptr[p*n + p] = n*n;printf("\n\t Spiral matrix of dimention (%d x %d):\n\n",n,n); for (i = 0; i < n; ++i)for (j = 0; j < n; ++j){ if (n*n < 20*20){ printf("%4d", *ptr[i*n + j]); if (j == (n-1)) printf("\n");} else if (n*n >= 20*20) goto mes;} mes: if (n > 19)printf("\n\t It is a large matrix. Can not to see on display.\n"); printf("\n Press any key: "); _getch(); return 0; }. 8.3.
. 8.3.
goto, , .
3
1. 3 19 .
2. M[n][n]. .
3. : , [n][n]. ( ). .
4. .
5. , , .
6. . .
7. . .
8. . .
. () .
4. 15 14 [12; 12] .
:
#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <time.h> #define N 15#define M 14const int Left = -12;const int Right = 12; int main(void) {int i, j, n, m;int matr[N][M];time_t t; // srand((unsigned)time(&t)); printf("\n Enter the number of lines of the matrix is not more than %d: ", N);scanf_s("%d", &n);printf(" Enter the number of columns of the matrix is not more than %d: ", M);scanf_s("%d", &m); // if (n > N || m > M || n < 1 || m < 1){ printf("\n\t Data error! Repeat please.\n");printf("\n Press any key: ");_getch(); return 0; } for (i = 0; i < n; ++i)for (j = 0; j < m; ++j)*(*(matr + i) + j) = 0; for (i = 0; i < n; ++i)for (j = 0; j < m; ++j)*(*(matr + i) + j) = (rand() % (2*Right+1)) + Left; printf("\n The matrix of random whole numbers from the entire [%d, %d]:\n", Left, Right); for (i = 0; i < n; ++i) {printf("\n "); for (j = 0; j < m; ++j)printf("%5d", *(*(matr + i) + j));} printf("\n\n Press any key: "); _getch(); return 0; }const . srand() , .. . time(&t), .
. 8.4.
. 8.4.
4
1. .
2. n m ?.
|
|
3. . .
4. , rand(), .
5. .
5. .
. n k, k m. n m. :
:
, :
:
#include <stdio.h>#include <conio.h>#define n 7#define k 12#define m 4 int main(void) {int i, j, p;int A[n*k], B[k*m];long int *C[n*m]; // for (i = 0; i < n; ++i)for(j = 0; j < m; ++j)C[i*m + j] = 0; for (i = 0; i < n; ++i)for (j = 0; j < k; ++j)A[i*k + j] = 0; for (i = 0; i < k; ++i)for (j = 0; j < m; ++j)B[i*m + j] = 0; // for (i = 0; i < n; ++i)for (j = 0; j < k; ++j)A[i*k + j] = i + j - 6; for (i = 0; i < k; ++i)for (j = 0; j < m; ++j)B[i*m + j] = i + j - 11; // for (i = 0; i < n; ++i)for (j = 0; j < m; ++j) { C[i*m + j] = 0;for (p = 0; p < k; ++p)C[i*m + j] += (A[i*k + p] * B[p*m + j]);}printf("\n\t The result of multiplying the two matrices:\n\t\t C = A*B (%dx%d = %dx%d * %dx%d)\n", n, m, n, k, k, m);for (i = 0; i < n; ++i) {printf("\n\t");for (j = 0; j < m; ++j)printf("%6ld", C[i*m + j]); } printf("\n\n Press any key: "); _getch(); return 0; }. ld.
. 8.5.
. 8.5.
5
1. k 5*, , . .
2. .
3. , .. .
4. ( ).
5. .
6. , 4 8, . . , .
3 4 8 , 3, 4, 8, *PTR[3*4*8].
:
#include <stdio.h>#include <conio.h>#define p 3 // "" #define n 4 // #define m 8 // int main (void){ int i, j, k, r; int *PTR[p*n*m], *M2[n*m]; // for (i = 0; i < p*n*m; ++i)PTR[i] = (int*)(i + 1); printf("\n An array of dimension %dx%dx%d:\n", p, n, m);puts("===========================================");// for (k = 0; k < p; ++k){ printf("\n"); for (i = 0; i < n; ++i) { printf(" "); for (j = 0; j < m; ++j){ printf(" %3d ",PTR[k*n*m + i*m + j]); } printf("\n"); } } puts("===========================================");printf("\n Select the number of arrays of a series of numbers (%d...%d): ",1, p); scanf_s("%d", &r);printf("\n Matrix number %d from three-dimensional array:\n", r);// 3- for (k = 0; k < p; ++k) for (i = 0; i < n; ++i) for (j = 0; j < m; ++j) if (k == (r-1)) {M2[i*m + j] = PTR[k*n*m + i*m + j];} for (i = 0; i < n; ++i) { printf("\n "); for (j = 0; j < m; ++j)printf(" %3d ", M2[i*m + j]); } printf("\n\n Press any key: "); _getch(); return 0; }( p = 3), ( n = 4) ( m = 8). () "". *PTR , . puts() \n.
. 8.6.
. 8.6.
6
1. , .. r [1;3].
2. , ***ptr3, **ptr2. .
3. n = 2*, , .
4. , [3*X; 3*X], , .
5. . (k,i,j) . .
7. , 15 , strstr(). .
strstr() string.h.
:
#include <stdio.h>#include <conio.h>#include <string.h>#include <stdlib.h>#include <time.h> int main (void) { int i, k = 0, n, in; int numSTR; int N = 1000; int numA, numZ; char str[16]; char sub[4]; char *ptr; srand((unsigned)time(NULL)); numA = (int)'a'; numZ = (int)'z'; printf("\n Enter the three letters: "); in = scanf_s("%s", sub, sizeof(sub)); if (in == 0) { printf("\n Error input. Press any key: "); _getch(); exit(1); } printf("\n\t substring is \"%s\"\n", sub); for (n = 0; n < N; n++) {for (i = 0; i < 15; i++)str[i] = numA + rand() % (numZ - numA) + 1; str[i] = '\0'; ptr = strstr(str, sub);if (ptr!= NULL) { numSTR = (int)(ptr - str +1); k++; break; }} if (k == 0) printf("\n\t Substring \"%s\" not found", sub); else printf("\n\t Substring \"%s\" found at positions %d, %d, %d", \ sub, numSTR, numSTR+1, numSTR+2); puts("\n"); for (i = 0; i < 15; i++) printf(" %3d)", i+1); puts(""); for (i = 0; i < 15; i++) printf(" %3c ", str[i]); printf("\n\n... Press any key: "); _getch(); return 0;}. , strstr() .
. 8.7.
. 8.7.
7
1. numSTR.
2. for while.
3. ( 15 ), (, ).
4. .
5. , . , , .
4.
1. ,
2. .
3. .
1. ?
2. ?
3. ?
4. ?
5. ?
6. () ?
7. ?
8. ?
6
.