Announcement

Collapse
No announcement yet.

Thắc mắc char vs #define

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Ansi C] Thắc mắc char vs #define

    Mình mới học C và tự học nên có 1 số "thắc mắc ko biết hỏi ai" mong chỉ giáo.
    Code:
    #include<stdio.h>
    
    #define MSG1 "And I love you so"
    
    int main(void)
    
    {
    		char msg[] = MSG1;
    		printf("%s",msg);
    		return 0;
    }
    kiểu char lưu được 1 byte, nhưng sao có thể lưu đc 1 chuỗi "And I love you so"? và #define gồm bao nhiêu byte?
    Và ở đây có nói đến string:
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    In fact, C's only truly built-in string-handling is that it allows us to use string constants (also called string literals) in our code. Whenever we write a string, enclosed in double quotes, C automatically creates an array of characters for us, containing that string, terminated by the \0 character. For example, we can declare and define an array of characters, and initialize it with a string constant:

    char string[] = "Hello, world!";

    In this case, we can leave out the dimension of the array, since the compiler can compute it for us based on the size of the initializer (14, including the terminating \0). This is the only case where the compiler sizes a string array for us, however; in other cases, it will be necessary that we decide how big the arrays and other data structures we use to hold strings are.
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    Mình có 2 thắc mắc ở chỗ này đó là string[] = "", sẽ có tối đa bao nhiêu kí tự và \o có nghĩa là gì??? Tk

  • #2
    1. Kiểu char lưu 1 byte nhưng dòng char msg[] = MSG1; là 1 mảng char.
    2. #define để khai báo 1 hằng số, không phải kiểu dữ liệu. Kiểu dữ liệu phụ thuộc vào cái MSG1 trong dòng code #define MSG1 "And I love you so". Vì vậy bao nhiêu byte là do cái MSG1 quyết định.
    3. \0 là kí tự null. Khi kết thúc 1 chuỗi phải có kí tự này để báo hiệu kết thúc chuỗi.
    ------"Some Will, Some Won't, So What? Someone's Waiting!"------

    Comment


    • #3
      Originally posted by 11520036 View Post
      1. Kiểu char lưu 1 byte nhưng dòng char msg[] = MSG1; là 1 mảng char.
      2. #define để khai báo 1 hằng số, không phải kiểu dữ liệu. Kiểu dữ liệu phụ thuộc vào cái MSG1 trong dòng code #define MSG1 "And I love you so". Vì vậy bao nhiêu byte là do cái MSG1 quyết định.
      3. \0 là kí tự null. Khi kết thúc 1 chuỗi phải có kí tự này để báo hiệu kết thúc chuỗi.
      Lưu ý define ko phải dùng để khai báo 1 hằng số!! Có thể nói dễ hiểu define giống như định nghĩa trước 1 định danh (tạm gọi là A) tiếp đó định nghĩa một đoạn mã tương đương với A (gọi là B).
      Sau khi compile, trình biên dịch sẽ tự động thay những đoạn mã trùng với A = đoạn mã B

      Define còn được dùng để khai báo một số macro thông dụng như so sánh 2 số chẳng hạn, ví dụ:


      PHP Code:
      /*
      The macro function can work with numerical values
      of any type. The values can be variables, constants or expressions.
      */
      #include <stdio.h>

      #define COMPARE(x,y)   ((x)<(y)?-1:((x)==(y)?0:1))

      int main()
      {
        
      double a 1.5;
        
      int n 2;
        
      float z 1.1f;
        
      printf("\n compare %lf (double) with %f (float): %d"zCOMPARE(a,z));
        
      printf("\n compare %lf (double) with %d (int): %d"nCOMPARE(a,n));
        
      printf("\n compare %d (int) with %f (float): %d"zCOMPARE(n,z));
        
      printf("\n compare \" n * a\" = %lf \n"
          " with \"n+1\" = to %d (double): %d"
      ,
           
      n*n+1COMPARE(n*a,n+1));
        
      printf("\n");

      Comment

      LHQC

      Collapse
      Working...
      X