Hỏi về cách nhập xuất dữ liệu trong con trỏ cấp 2

dưới đây là code nhập xuất dữ liệu bằng con trỏ cấp 2. cho em hỏi ở phần nhập (dòng 13-15) và phần xuất (dòng 23-25) tại sao chỉ dùng được kiểu thứ 1 mà kiểu 2,3 chạy lại bị lỗi ạ? em cảm ơn

  1. #include <stdio.h>
    
  2. #include <stdlib.h>
    
  3. int main(){
    
  4.     int **n=(int **)malloc(3*sizeof(int *));
    
  5.     for (int i = 0; i < 2; i++)
    
  6.     {
    
  7.         *n=(int *)malloc(2*sizeof(int));
    
  8.     }
    
  9.     for (int i = 0; i < 3; i++)
    
  10.     {
    
  11.        for (int j = 0; j < 2; j++)
    
  12.        {
    
  13.             // scanf("%d",(n+i*2+j));             1
    
  14.             // scanf("%d",(*(n+i)+j));            2
    
  15.             // scanf("%d",&n[i][j]);              3
    
  16.        }
    
  17.     }
    
  18.     for (int i = 0; i < 3; i++)
    
  19.     {
    
  20.        for (int j = 0; j < 2; j++)
    
  21.        {
    
  22.             // printf("%d\t",*(n+i*2+j));          1
    
  23.             // printf("%d\t",*(*(n+i)+j));         2
    
  24.             // printf("%d",n[i][j]);               3
    
  25.        }
    
  26.        printf("\n");
    
  27.     }
    
  28.     return 0;
    
  29. }

Line 5: i<3
Line 7: *n phải là n[i]
Với cách cấp phát này thì kiểu 2 và kiểu 3 sẽ dùg được
Muốn dùng kiểu 1 bạn phải cấp phát mảng 1 chiều (kích thước 3x2= 6)
Bạn nên đọc lại khái niệm con trỏ

3 Likes

line 5: tại sao em để i<2 dùng kiểu 1 lại chạy được ạ
line 7: tại sao em để *n thì kiểu 1 dùng được vậy ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?