C 언어의 포인터 또는 포인터 변수

15981 단어 C 언어tech

aray 및 pointer


aray와 지침은 우선 완전히 다른 것이다.
지침 변수에 [1],[2]를 더하면 배열 유형에 [1],[2]를 더하면 방문 요소 번호는 공교롭게도 같은 []를 사용했을 뿐 뜻이 다르다.
포인터 변수인 경우 주소에 더하기를 사용합니다.
  • https://www.programiz.com/c-programming/c-pointers-arrays
  • https://www.studytonight.com/c/pointers-with-array.php
  • https://web.stanford.edu/class/archive/cs/cs107/cs107.1206/lab3/
  • sizeof는operator, not function입니다.
    https://en.cppreference.com/w/cpp/language/sizeof
    Stackoverflow의aray 크기를 계산하는 방법
    https://stackoverflow.com/questions/37538/how-do-i-determine-the-size-of-my-array-in-c
    size_t n = sizeof(a) / sizeof(a[0]);
    
    a[0]는'수조 변수 a를 지정하는 첫 번째 요소'의 문법이다
    네.여기, a는 배열의 시작 부분의 바늘 변수로 거기에서 이런 인상을 얻는다.
    size_t n = sizeof(a) / sizeof(*a);
    
    비고
    #include <stdio.h>
    
    int main() {
        int arr[3] = {10,20,30};
        int* t = arr; 
        printf("%p\n", t);
        printf("arr: %lu\n", arr);
        printf("t: %lu\n", t);
        printf("the size of arr : %lu\n", sizeof(arr)); // int型のarrayなので要素数 * int型のサイズ = 12
        printf("the size of *arr : %lu\n", sizeof(*arr)); // arrの先頭の要素の
        printf("the size of t : %lu\n", sizeof(t)); // ポイント変数なので8
    
        // ポインタ変数でやった場合
        printf("t[0]: %d\n", t[0]);
        printf("t[1]: %d\n", t[1]);
        printf("t[2]: %d\n", t[2]);
        // printf("%d\n", t[3]);
    
        // arrのindexでアクセスした場合
        printf("arr[0]: %d\n", arr[0]);
        printf("arr[1]: %d\n", arr[1]);
        printf("arr[2]: %d\n", arr[2]);
        // printf("%d\n", arr[3]);
    
        // arrは配列先頭のポインタなので、*arrだと、arrの先頭要素の値にアクセス可能
        // arr+1は、配列の先頭から次のポインタにアクセス。
        printf("*arr: %d\n", *arr);
        printf("*(arr+1): %d\n", *(arr+1));
        printf("*(arr+2): %d\n", *(arr+2));
    
        return 0;
    }
    
    sizeof 조작자가main 함수를 제외한 function에서main 함수를 기대하지 않는 행위
    -> https://www.jpcert.or.jp/sc-rules/c-arr01-c.html
    함수clear () 는 그룹 요소를 0으로 초기화합니다.이 함수는 intarray[]로 표시된 인자를 추출하여 12개의 int로 구성된 정적 진열을 전달합니다.함수clear는sizeof라고 불리는 문법을 사용하여 진열의 원소의 수를 확정합니다.그러나 aray는 매개 변수이기 때문에 바늘형이다.따라서sizeof는sizeof와 같다.예를 들어sizeof=4와sizeof=4의 구조(IA-32 등)의 경우 전달된 진열의 크기와 상관없이 식sizeof/sizeof의 값은 1이고 진열의 나머지 요소는 초기화되지 않았다.

    32비트 및 64비트


    https://eng-entrance.com/32bit-64bit#32bit_64bit

    경품 C++


    #include <stdio.h>
    
    int main() {
        int a[10];
        int* p = a;
        printf("%lu\n", sizeof(a)); // a全体のsizeなので40
        printf("%lu\n", sizeof(a[0])); // arrayの先頭の要素、つまりintのsizeなので4
        printf("%lu\n", sizeof(a) / sizeof(a[0])); // 要素数が計算できる
        printf("=========\n");
        printf("%lu\n", sizeof(p)); // pというポインタ変数のsizeなので 8
        printf("%lu\n", sizeof(int*)); // int型のポインタ変数のsizeなので 8
        printf("%d\n", sizeof(p) == sizeof(int*)); // same sizeなのでtrue = 1 
        printf("%d\n", sizeof(*p) == sizeof(int)); // *pは、int型のpというポインタ変数の値なので4, sizeof(int)もint型のsizeなので4。よって1 
        return 0;
    }
    

    참고 자료

  • https://qiita.com/agate-pris/items/05948b7d33f3e88b8967
  • 좋은 웹페이지 즐겨찾기