text:
21
2010
Bài 4 – Biến và kiểu dữ liệu
(Bài học lên mạng ngày 21/11/2010) Nếu đã từng lập trình qua với Pascal/C/C++, bạn sẽ thấy thật thoải mái khi lập trình với PHP vì sự “dễ dãi” đến không ngờ của nó trong việc quản lý biến.
Biến & dữ liệu
Đúng như tên gọi, biến là một phần tử chứa các giá trị thay đổi (biến thiên). Để chỉ định một biến, bạn viết dấu $ rồi đến tên của biến.
Ví dụ:
<?php $a = 1; $a = ‘hello world’; $a = 23.45; $a = &$a; ?>
Bài tập 4.1:
- Có thể chỉ dùng chữ cái (a,b,c…) để đặt tên biến hay không?
- Có thể chỉ dùng chữ số (0,1,2,3…) để đặt tên biến hay không?
- Có thể dùng kết hợp chữ cái và chữ số để đặt tên biến hay không?
- Có thể dùng các ký tự + – * / để đặt tên biến hay không?
- Tên biến có phân biệt chữ hoa và chữ thường không? (Ví dụ, biến $abc với biến $Abc là khác nhau hay giống nhau)
- Tên biến có thể bắt đầu bằng một chữ số hay không? (Ví dụ $1abc, $2cdh, $3kkklm…)
- Tên biến có thể bắt đầu bằng dấu gạch dưới _ hay không? (Ví dụ $_1c, $_2c, $_3m…)
- Có được đặt 1 biến tên là $php hay không?
- Có được đặt 1 biến tên là $echo hay không?
Với tất cả các câu trả lời, phải có dẫn chứng chứng minh.
Biến trong PHP có thể mang một kiểu giá trị bất kì. Và PHP sẽ căn cứ vào giá trị sau cùng mà biến lưu giữ để “quyết định” xem biến đó cần có kiểu gì. Với ví dụ trên, biến $a sẽ có kiểu dữ liệu thay đổi sau mỗi lệnh gán dữ liệu, cụ thể như sau:
Các bạn có thể xem mã nguồn chi tiết trong file vidu-4-1.txt
(Tôi vừa “sực nhớ” ra một tiện ích khá thú vị của cửa sổ lệnh MS DOS. Đó là khi bạn gõ đường dẫn trong cửa sổ này, bạn chỉ cần gõ một vài chữ đầu tiên, sau đó nhấn phím TAB, thì nó sẽ tự điền đường dẫn tiếp theo cho bạn, thay vì phải gõ đầy đủ từ đầu đến cuối. Ví dụ tôi chỉ cần gõ php m rồi nhấn phím tab, thì nó sẽ tự điền cho tôi là php manguon, sau đó tôi gõ tiếp \vi và nhấn phím tab thì nó sẽ tự điền vô thành php manguon\vidu-4-1.txt)
Một số chú ý khi xem ví dụ 4-1:
- Lệnh echo được sử dụng để hiển thị dữ liệu ra màn hình
- Dấu , được sử dụng để hiển thị nhiều kiểu dữ liệu khác nhau
- Dấu nháy đơn ‘ được sử dụng để bao chuỗi nhằm tăng tốc chương trình
- Hàm var_dump($a) được sử dụng để hiển thị kiểu và giá trị của biến $a
- Hàm rand() được sử dụng để tạo ra một giá trị ngẫu nhiên
- int(1) nghĩa là dữ liệu kiểu nguyên (int là viết tắt chữ integer – số nguyên) và có giá trị là 1
- string(11) nghĩa là dữ liệu kiểu chuỗi ký tự, tuy nhiên, con số trong ngoặc đơn lúc này là biểu thị độ dài của chuỗi (11 ký tự), thay vì giá trị của biến.
- float(23.45) nghĩa là dữ liệu kiểu số thực và có giá trị là 23.45 (hai mươi ba phết bốn mươi lăm / hai mươi ba phẩy bốn mươi lăm)
Nhìn vào kết quả chạy chương trình ví dụ, bạn sẽ thấy ngay, khi gán cho biến $a một số nguyên thì $a mang kiểu dữ liệu int, khi gán cho $a một số thực thì $a mang kiểu dữ liệu float, khi gán cho $a một chuỗi thì $a mang kiểu dữ liệu string.
Bài tập 4.2:
Với quy ước rằng int đại diện cho một biến có kiểu int, float đại diện cho biến có kiểu float và string đại diện cho biến có kiểu string, hãy cho biết:
- int + int tạo ra dữ liệu kiểu gì?
- int + float tạo ra dữ liệu kiểu gì?
- float + int tạo ra dữ liệu kiểu gì?
- int + string tạo ra dữ liệu kiểu gì?
- string + float tạo ra dữ liệu kiểu gì?
- Int . int tạo ra dữ liệu kiểu gì? (dấu . được sử dụng khi các bạn dùng nối chuỗi ở ví dụ của lý thuyết bài 3)
- Float . float tạo ra dữ liệu kiểu gì?
- String . float tạo ra dữ liệu kiểu gì?
- Int + float . string tạo ra dữ liệu kiểu gì?
- int * int tạo ra dữ liệu kiểu gì?
- int / float tạo ra dữ liệu kiểu gì?
- float / int tạo ra dữ liệu kiểu gì?
- int / string tạo ra dữ liệu kiểu gì?
- string * float tạo ra dữ liệu kiểu gì?
- Int / int tạo ra dữ liệu kiểu gì? (dấu . được sử dụng khi các bạn dùng nối chuỗi ở ví dụ của lý thuyết bài 3)
- Float / float tạo ra dữ liệu kiểu gì?
- float * string tạo ra dữ liệu kiểu gì?
- Int / float + string tạo ra dữ liệu kiểu gì?
- Int % float tạo ra dữ liệu kiểu gì? (dấu % được dùng để lấy phần dư trong một phép chia. Ví dụ 10/2 được 5 dư 0 nên 10%2=0; 10/3=3 dư 1 nên 10%3=1)
- int % int tạo ra dữ liệu kiểu gì?
Với tất cả các câu trả lời, phải có dẫn chứng chứng minh.
Bài tập 4.3: Chuyển từ kiểu nguyên về kiểu chuỗi
Sử dụng các phép toán + – * / % . (nối chuỗi), thêm vào mã lập trình ở chỗ bôi vàng để có được kết quả như hình minh hoạ.
Bài tập 4.4: Chuyển từ kiểu chuỗi về kiểu nguyên
Sử dụng các phép toán + – * / % . (nối chuỗi), thêm vào mã lập trình ở chỗ bôi vàng để có được kết quả như hình minh hoạ.
Bài tập 4.5: Chuyển từ kiểu nguyên về kiểu thực
Sử dụng các phép toán + – * / % . (nối chuỗi), thêm vào mã lập trình ở chỗ bôi vàng để có được kết quả như hình minh hoạ.
Bài tập 4.6:
- Dữ liệu kiểu chuỗi trong PHP có độ dài tối đa bao nhiêu ký tự? Giải thích.
- Dữ liệu kiểu số nguyên trong PHP có thể lớn đến bao nhiêu? Giải thích.
- Dữ liệu kiểu số thực trong PHP có thể lớn đến bao nhiêu? Giải thích.
Chú ý: không được đi “search” thông tin rồi điền vô, mà các bạn phải tự tìm cách “thực nghiệm” và đưa ra kết luận. Kể cả là kết luận dự đoán tôi cũng chấp nhận.
“Ép” kiểu
Qua các bài tập 4.3, 4.4, 4.5 các bạn có thể tự rút ra kết luận về một số cách thức chuyển đổi qua lại các kiểu dữ liệu khác nhau. Tuy nhiên, sẽ rất khó khăn để chuyển từ kiểu dữ liệu số thực về ngược lại kiểu dữ liệu số nguyên chỉ với các phép toán + – * / % và .
Trong thực tế, PHP cung cấp cho chúng ta một cách thức để chuyển kiểu dữ liệu nhanh gọn hơn, đó là “ép” kiểu. Để ép một kiểu dữ liệu bất kỳ về kiểu nguyên, bạn chỉ cần thêm toán tử (int) vào trước giá trị của nó.
Ví dụ:
Tương tự (float) dùng để ép kiểu về giá trị số thực và (string) để ép kiểu về giá trị chuỗi ký tự:
Hoặc như các bạn đã biết từ các bài tập trước, có thể dùng dấu nháy kép “ để ép kiểu của biến về string một cách đơn giản thế này:
<?php $a=12.34; $b = “$a”; var_dump($b); ?>
Nói thêm về dữ liệu kiểu chuỗi
String là kiểu dữ liệu mà bạn cần quan tâm nhiều hơn các kiểu khác, vì “mai mốt” bạn sẽ phải giải quyết nhiều vấn đề với chuỗi hơn bất cứ kiểu dữ liệu nào khác (trừ khi bạn là một chuyên gia toán hay vật lý học J).
Để tạo ra một giá trị kiểu string, chúng ta có thể dùng nháy đơn, nháy kép hoặc ép kiểu bằng cú pháp (string)…
<?php $s1 = ‘123456’; $s2 = “123456”; $s3 = (string)123456; ?>
Sử dụng dấu ‘ luôn giúp bạn tăng tốc chương trình so với việc dùng “, vì PHP “đối xử” với các giá trị đặt trong “ theo một cách riêng. PHP sẽ truy tìm xem trong chuỗi đó có dấu \ hay không, nếu có, nó sẽ diễn dịch dấu \ và ký tự theo sau thành những nội dung đặc biệt:
Bài tập 4.7: Hãy dùng lệnh echo để viết ra màn hình các dòng chữ sau đây
Xin chao, toi la Long “/\/\e`o /\/\un”
Nen /\/guoi ta goi toi la Ty Phu Khong /\/ha`
Chú ý :
1) Chữ M trong « Meo Mun » và chữ N trong « Nguoi ta », « Khong Nha » được ghép bởi các ký tự gạch chéo /\/\ . Dấu huyền trong chữ Mèo Mun và chữ Nhà là dấu ` nằm chung với dấu ~, phía dưới nút Esc trên bàn phím.
2) Các bạn phải ĐỌC THẬT KỸ đề bài. Bài này có đố mẹo!
Bài tập 4.8 : Hãy dùng lệnh echo viết ra màn hình nội dung sau đây (bài này làm bình thường, không đố mẹo gì hết :D Mục đích để giúp các bạn làm quen với việc xử lý các ký tự đặc biệt như « ‘ \ $ khi lập trình thôi)
<?php
echo ‘this is a simple string’;
echo ‘You can also have embedded newlines in
strings this way as it is
okay to do’;
// Outputs: Arnold once said: “I’ll be back”
echo ‘Arnold once said: “I\’ll be back”‘;
// Outputs: You deleted C:\*.*?
echo ‘You deleted C:\\*.*?’;
// Outputs: You deleted C:\*.*?
echo ‘You deleted C:\*.*?’;
// Outputs: This will not expand: \n a newline
echo ‘This will not expand: \n a newline’;
// Outputs: Variables do not $expand $either
echo ‘Variables do not $expand $either’;
?>
Các bạn nộp bài trước 12h trưa thứ 3, ngày 23/11/2010 nhé. Chúc các bạn học tốt.
27 Comments + Add Comment
Leave a comment
Liên kết nhanh
Bài viết mới
- Bài 8 – Vòng lặp FOR, phức tạp nhưng đầy sức mạnh
- Bài 7 – Câu lệnh điều kiện rút gọn, câu lệnh điều kiện phức hợp & câu lệnh rẽ nhánh
- Thảo luận về bài tập 6
- Bài 6 – Câu lệnh điều kiện
- Thảo luận về bài tập 5
- Bài 5 – Hằng, biến biến và cách nhập dữ liệu từ bàn phím
- Thảo luận về bài tập 4 (tiếp theo)
- Thảo luận về bài tập 4
- Bài 4 – Biến và kiểu dữ liệu
- Thảo luận về bài tập 3
Phản hồi gần đây
- nguyenquoc on Thảo luận về bài tập 4 (tiếp theo)
- bobby on Bài 2 – Lập trình web bằng PHP là gì?
- naxovi on Bài 2 – Lập trình web bằng PHP là gì?
- Viet Anh on Thảo luận về bài tập 3
- Viet Anh on Thảo luận về bài tập 2
- no_handsome on Bài 1 – Một số cam kết trước khi học lập trình
- Yan on Bài 1 – Một số cam kết trước khi học lập trình
- Quang Lâm on Bài 2 – Lập trình web bằng PHP là gì?
- ngonchan on Bài 1 – Một số cam kết trước khi học lập trình
- ysa on Bài 1 – Một số cam kết trước khi học lập trình
mình chưa hiểu ví dụ này:
Khi ta đã gán $a = 1
sau đó gán tiếp $a = ‘hello world’
rồi lại gán tiếp $a = 23.45
trình biên dịch sẽ dịch từ trên xuống dưới và lấy giá trị cuối cùng của $a là 23.45.
Vậy lệnh ép tham chiếu $a = &$a sẽ có tác dụng gì?
Vậy có phải ví dụ này là chỉ ra rằng trong php chúng ta o cần phải khai báo kiểu dữ liệu của biến và có thể thay đổi kiểu dữ liệu của biến 1 cách thaoi3 mái hay o?
Mong anh Mum trả lời.Xin cảm ơn.
Qua ví dụ này, MMun muốn nói rằng biến trong PHP là không (cố) định kiểu, ví dụ từ đầu gán $a = 1 thì $a mang kiểu nguyên, nhưng sau đó vẫn gán một giá trị kiểu chuỗi vào cho nó v.v…
Trong khi đó, các ngôn ngữ như Pascal/C/C++/Java thì biến $a là kiểu nguyên thì không thể gán giá trị kiểu chuỗi vô (Pascal thì MMun chắc chắn, còn các ngôn ngữ kia thì MMun mới hỏi bà chị, bả nói vậy à, còn MMun không học nên cũng không chắc lắm )
Pascal/C/C++ đều thế, đã khai báo kiểu dữ liệu thì không được phép gán kiểu khác. Jave thì ko biết
$a = &$a ko phải là ép tham chiếu. “&” chỉ ra là word kế tiếp sẽ là Biến chứ ko phải là giá trị.
Là sao ạ, mình ko hiểu lắm
Mình trả lời bạn trên, quote lộn
Theo mình biết,Pascal/C/C++ /Jave đều buộc khai báo tên biến và kiểu dữ liệu trước khi sử dụng .
$a = &$a ko phải là ép tham chiếu. “&” chỉ ra là word kế tiếp sẽ là Biến chứ ko phải là giá trị.—–> cái này mình không đồng tình với bạn vì theo mình biết cú pháp của PHP xây dựng trên nền C.Nên dấu & trước tên biến dùng để truyền 1 biến theo kiểu tham chiếu.Tức là giá trị của biến đó sẽ thay đổi sau khi hàm trả về.
Mình xin đưa ra ví dụ sau trên C++ :
int vd(int &n)
{
n=n+10;
return n;
}
Mình tưởng bạn bắt đầu học lập trình nên nói nôm na cho dễ hiểu đâu biết bạn cũng là dân lập trình
sau & để chỉ ra đó là biến thì có nghĩa là truyền biến tham chiếu cho biến trc đó còn gì
PHP có tham chiếu mà
biến trong php nó hàm ý là kiểu tự do. Không phân biệt rõ ràng đó là kiểu gì nó chỉ rõ ràng khi bạn settype cho nó hoặc ép kiểu của nó. Trong c++/java biến tự do không thuộc kiểu nào thì là void. C++/java khi khai báo biến phải cho biết biến đó thuộc kiểu gì không được khai như php.
Để tránh phiền phức về kiểu trong php khi so sánh 2 kiểu giống nhau thì nên ép nó về cùng 1 kiểu để so sánh cho chính xác.
Dấu & trong biến thể hiện tham chiếu
////////////////
$a=7;
$a=&$b;
$b=8;
echo $a; ==> in ra 8
////nếu không có dấu &
$a=7;
$a=$b;
$b=8;
echo $a; ===>in ra 7
Ví dụ trên nhằm
Nếu có &
$a=7;
$b=8;
$a=&$b;
$a=9;
echo $b;==>in ra 9
Nếu không có &
$a=7;
$b=8;
$a=$b;
$a=9;
echo $b;==>in ra 8
Nghĩa là khi có dấu & vào thì biến $a thay đổi thì $b sẽ bị thay đổi theo.
mỗi 1 biến sẽ có 1 địa chỉ và địa chỉ này trỏ đến biến
ví dụ: $a=7; thì sẽ phát sinh 1 địa chỉ có tên là ababbc(gì đó chẳng biết) nhưng cái địa chỉ này trỏ đến số 7. Nếu khai báo $a=&$b thì bạn báo rằng thằng b có đại chỉ là ababbc. Do đó nếu mà ababbc trỏ đến giá trị nào thì thằng b sẽ có giá trị đó
Ai học C sẽ biết việc phức tạp của địa chỉ con trỏ .
Nói chung dễ hiểu nhất là khi muốn thay đổi giá trị biến trong hàm thì phải dùng &. Để hiểu rõ hơn bài này thì chắc các bạn phải chờ Mèo giới thiệu đến biến toàn cục và biến cục bộ mới hiểu thấu vấn đề này
Các bạn đang học các vấn đề cơ bản thôi mà.
Sao lại lôi con trỏ vào đây. Các bạn làm thế chỉ khiến cho người mới học lập trình thêm hoang mang.
Thôi kệ để các ban ý tranh luận với nhau cho vui, người học, nhất là học online thì có thể học từ nhiều nguồn và cần biết tiếp thu có chọn lọc
Nếu anh Mun nói vậy thì nhào vô cho xôm tụ nào =))
“Nghĩa là khi có dấu & vào thì biến $a thay đổi thì $b sẽ bị thay đổi theo.”
$a=7;
$b=8;
$a=&$b;
$a=9;
echo $b;==>in ra 9
=> ko sai
thế bạn Dũng đã thử cái này chưa ?
$a=7;
$b=8;
$a=9;
$a=&$b;
echo $b;
mình học con trỏ bên C được cho biết chỉ là học để biết, vì tính bảo mật không cao. Nnlt java cũng loại bỏ con trỏ. Còn học để chọc ngoáy thứ gì đó thì tùy mọi người :-”
$a=7;
$b=8;
$a=9;
$a=&$b;
echo $b;
bạn thấy rằng trước khi gán $a=&$b; thì $a thay đổi nghĩa là trước đó $b không có liên quan gì đến $a. Sau đó $b mới được tham chiếu và chỉ mới tham chiếu thôi chứ nó chưa nhận diện được sự thay đổi.
Con trỏ rất phức tạp mình cũng đã nói rồi. Trong php không đặt năng vấn đề con trỏ nhưng phải biết sử dụng & để còn làm 1 số việc cần thiết
Con trỏ không phải bảo mật kém mà nó rất trù tượng và khó hiểu sử dụng nó khá rắc rối do đó những ngôn ngữ sau này đã hạn chế đụng đến nó
ngôn ngữ Java và PHP o hoàn toàn loại bỏ con trỏ vì theo mình được biết,dấu & cũng là 1 dạng con trỏ ,trỏ tới vùng nhớ chứa giá trị của biến!
cái trên là tham chiếu, còn tham trị trong php thì sao hả bạn.
Mà con trỏ nó trỏ tới vùng lưu trữ bộ nhớ của biến, vậy đó không phải vấn đề bảo mật hả ?
Con trỏ làm sao bỏ được ạ, cùng lắm thì nó được “che chắn” đi khiến cho lập trình viên không cần/không phải “nhìn thấy” và quản lý thôi. Ví dụ ngay như kiểu string trong PHP bản chất là mảng ký tự động, khi này trình thông dịch phải dùng con trỏ để quản lý nhưng coder thì không cần biết về điều đó.
đúng rồi, bên C khi scanf một giá trị có một đoạn là &var_name, nó cũng thuộc về con trỏ. Em được cô dạy là con trỏ bên C có tính bảo mật không cao và chỉ được dạy lý thuyết, nhưng em vẫn tò mò muốn biết, ngoài cấp phát bộ nhớ, gán giá trị gián tiếp, tham chiếu, tham trị, thì còn chức năng nào khác. Em không nghĩ là con trỏ chỉ có nhiu đó chức năng.
Theo anh thì nếu không có con trỏ sẽ không có bất cứ cái gì liên quan đến ngành máy tính. Con trỏ cũng quan trọng và không thể thiếu như + – * / vậy. Nhưng vẫn nhắc lại rằng nó đã được/bị “ẩn” đi. Giống như em nấu cơm thì ra siêu thị mua gạo về vo và nấu; muốn làm bánh thì lấy gạo đó xay ra thành bột rồi nhào nặn chứ không cần biết đến việc tồn tại trên đời một cái gọi là hạt thóc vậy à
Anh thì không rành nhiều về thuật toán, nhưng nếu anh nhớ không lầm thì các bài toán về tìm đường đi ngắn nhất (nền tảng để phát triển các tiện ích như trên diadiem.com hay Google MAP) đều dùng giải thuật liên quan đến con trỏ á.
Mình xin giải thích rõ hơn về tham chiếu và tham trị như sau:
int vd_thamchieu(int &n)
{
n=n+10;
return n;
}
với hàm vd_thamchieu trên,bạn gọi nó và truyền giá trị n=5 như sau:
int a=vd_thamchieu(5) ;
vậy giá trị của a=15.
ngược lại với ví dụ tham trị sau:
int vd_thamtri(int n)
{
n=n+10;
return n;
}
với hàm vd_thamchieu trên,bạn gọi nó và truyền giá trị n=5 như sau:
int a=vd_thamtri(5) ;
vậy giá trị của a=5.
Ngoài ra,như anh MMun nói, trong PHP và cả Java đều o trực tiếp sử dụng con trỏ.Tuy nhiên,việc quản lý bộ nhớ,các kiểu dữ liệu như linklist,stak…ngầm định của trình biên dịch buộc phải sử dụng con trỏ.
Và thuật toán tìm đường đi ngắn nhất có tên là Dijkstra .Trên PHP thì mình o biết nhưng trên C/C++ nhất thiết phải dùng con trỏ với kiểu dữ liệu Queue để giải quyết.
/*Queue có thể cài đặt bằng mảng mà mình thì chưa làm nên o biết có giải quyết Dijkstra được o,nên thôi cứ phán bừa!
*/
cả 2 kết quả của bạn đều ra 15 cả
Còn đây là code nêu rõ sự khác nhau của tham trị và tham chiếu trong C :
#include
int thamtri (int n)
{ return ++n; }
int thamchieu (int *n)
{ return ++*n; }
void main ()
{
int a = 10;
int b = thamtri (a);
int c = 10;
int d = thamchieu (&c);
printf (“Phan tham tri : a:%d b:%d \nPhan tham chieu : c:%d d:%d”,a,b,c,d);
}
ái chà C từa lưa vậy ta. Đây là php mà ta mcmxc bạn đã hiểu sai tác dụng dấu & rồi . Khi nào Mèo giới thiệu đến bài về các biến toàn cục hay cục bộ gì đó chắc lúc đó sẽ comment rõ hơn cho bạn dùng & như thế nào. Giờ mà nói thì loạn xà ngầu lên. 1 số thuật toán tìm đường đi ngắn nhất, ghét đôi, cây nhị phân tìm kiếm gì gì đó bạn có thể tìm hiểu vài cuốn toán rời rạc nâng cao của KHTN. Đọc đi tư duy của bạn sẽ nâng cấp 1 bậc nhưng cảnh báo trước trình độ phải là sinh viên năm 2 trở lên hãy đọc vì dưới nửa thì khó mà tiếp thu
Có vẻ a T.Dũng học từ khá lâu rồi.Bây h người ta gọi môn đó là Lý Thuyết Đồ Thị.
Cái tên toán rời rạc nâng cao chắc ít nhất 5 năm rồi người ta o dùng tới!
Riêng về tác dụng dấu & ,sau khi tham khảo nhiều nguồn thì em vẫn xin giữ quan điểm của em.
Mong rằng tới bài Tầm vực của biến chúng ta sẽ hiểu dấu & một cách chính xác và đầy đủ nhất.
Xin cảm ơn tất cả mọi người!
Mấy hôm nay bận quá, chắc mai mới đọc bài này được
Từa lưa hết rồi
Anh Mèo ơi, em và mấy người bạn thấy anh ra nhiều bài tập quá, mà ra nhiều bài tập nhìn cũng nản nản anh àh
Anh xem xét việc giảm lượng bài tập tí nhé
Lười làm bài thì không giỏi được đâu em ạ.
Học ở đây có bắt ép làm bài đâu, bọn em thấy nhiều quá không làm được thì cứ làm ít. Anh comment dựa trên lời giải của bọn em mà

markdown:
21
2010
# Bài 4 – Biến và kiểu dữ liệu
![ Author](http://hocphponline.com/blog/wp-content/themes/alltuts/images/ico_author.png)
[MMun](http://nguyenngoclong.com) ![ Comments](http://hocphponline.com/blog/wp-content/themes/alltuts/images/ico_comments.png)
[27 Comments](http://hocphponline.com/blog/bien-va-kieu-du-lieu/#comments) *(Bài học lên mạng ngày 21/11/2010)* Nếu đã từng lập trình qua với Pascal/C/C++, bạn sẽ thấy thật thoải mái khi lập trình với PHP vì sự “dễ dãi” đến không ngờ của nó trong việc quản lý biến. **Biến & dữ liệu**
Đúng như tên gọi, biến là một phần tử chứa các giá trị thay đổi (biến thiên). Để chỉ định một biến, bạn viết dấu $ rồi đến tên của biến.
Ví dụ:
<?php $a = 1; $a = ‘hello world’; $a = 23.45; $a = &$a; ?>
**Bài tập 4.1: **
- Có thể chỉ dùng chữ cái (a,b,c…) để đặt tên biến hay không?
- Có thể chỉ dùng chữ số (0,1,2,3…) để đặt tên biến hay không?
- Có thể dùng kết hợp chữ cái và chữ số để đặt tên biến hay không?
- Có thể dùng các ký tự + – * / để đặt tên biến hay không?
- Tên biến có phân biệt chữ hoa và chữ thường không? (Ví dụ, biến $abc với biến $Abc là khác nhau hay giống nhau)
- Tên biến có thể bắt đầu bằng một chữ số hay không? (Ví dụ $1abc, $2cdh, $3kkklm…)
- Tên biến có thể bắt đầu bằng dấu gạch dưới _ hay không? (Ví dụ $_1c, $_2c, $_3m…)
- Có được đặt 1 biến tên là $php hay không?
- Có được đặt 1 biến tên là $echo hay không?
Với tất cả các câu trả lời, phải có dẫn chứng chứng minh.
Biến trong PHP có thể mang một kiểu giá trị bất kì. Và PHP sẽ căn cứ vào giá trị sau cùng mà biến lưu giữ để “quyết định” xem biến đó cần có kiểu gì. Với ví dụ trên, biến $a sẽ có kiểu dữ liệu thay đổi sau mỗi lệnh gán dữ liệu, cụ thể như sau:
Các bạn có thể xem mã nguồn chi tiết trong file
[vidu-4-1.txt](http://hocphponline.com/blog/wp-content/uploads/2010/11/vidu-4-1.zip)
(Tôi vừa “sực nhớ” ra một tiện ích khá thú vị của cửa sổ lệnh MS DOS. Đó là khi bạn gõ đường dẫn trong cửa sổ này, bạn chỉ cần gõ một vài chữ đầu tiên, sau đó nhấn phím TAB, thì nó sẽ tự điền đường dẫn tiếp theo cho bạn, thay vì phải gõ đầy đủ từ đầu đến cuối. Ví dụ tôi chỉ cần gõ
** rồi nhấn phím tab, thì nó sẽ tự điền cho tôi là php m** **, sau đó tôi gõ tiếp** *php manguon* **và nhấn phím tab thì nó sẽ tự điền vô thành** *\vi* **)** *php manguon\vidu-4-1.txt* *Một số chú ý khi xem ví dụ 4-1:*
- Lệnh echo được sử dụng để hiển thị dữ liệu ra màn hình
- Dấu , được sử dụng để hiển thị nhiều kiểu dữ liệu khác nhau
- Dấu nháy đơn ‘ được sử dụng để bao chuỗi nhằm tăng tốc chương trình
- Hàm var_dump($a) được sử dụng để hiển thị kiểu và giá trị của biến $a
- Hàm rand() được sử dụng để tạo ra một giá trị ngẫu nhiên
- int(1) nghĩa là dữ liệu kiểu nguyên (int là viết tắt chữ integer – số nguyên) và có giá trị là 1
- string(11) nghĩa là dữ liệu kiểu chuỗi ký tự, tuy nhiên, con số trong ngoặc đơn lúc này là biểu thị độ dài của chuỗi (11 ký tự), thay vì giá trị của biến.
- float(23.45) nghĩa là dữ liệu kiểu số thực và có giá trị là 23.45 (hai mươi ba phết bốn mươi lăm / hai mươi ba phẩy bốn mươi lăm)
Nhìn vào kết quả chạy chương trình ví dụ, bạn sẽ thấy ngay, khi gán cho biến $a một số nguyên thì $a mang kiểu dữ liệu int, khi gán cho $a một số thực thì $a mang kiểu dữ liệu float, khi gán cho $a một chuỗi thì $a mang kiểu dữ liệu string.
**Bài tập 4.2: **
Với quy ước rằng int đại diện cho một biến có kiểu int, float đại diện cho biến có kiểu float và string đại diện cho biến có kiểu string, hãy cho biết:
- int + int tạo ra dữ liệu kiểu gì?
- int + float tạo ra dữ liệu kiểu gì?
- float + int tạo ra dữ liệu kiểu gì?
- int + string tạo ra dữ liệu kiểu gì?
- string + float tạo ra dữ liệu kiểu gì?
- Int . int tạo ra dữ liệu kiểu gì? (dấu . được sử dụng khi các bạn dùng nối chuỗi ở ví dụ của lý thuyết bài 3)
- Float . float tạo ra dữ liệu kiểu gì?
- String . float tạo ra dữ liệu kiểu gì?
- Int + float . string tạo ra dữ liệu kiểu gì?
- int * int tạo ra dữ liệu kiểu gì?
- int / float tạo ra dữ liệu kiểu gì?
- float / int tạo ra dữ liệu kiểu gì?
- int / string tạo ra dữ liệu kiểu gì?
- string * float tạo ra dữ liệu kiểu gì?
- Int / int tạo ra dữ liệu kiểu gì? (dấu . được sử dụng khi các bạn dùng nối chuỗi ở ví dụ của lý thuyết bài 3)
- Float / float tạo ra dữ liệu kiểu gì?
- float * string tạo ra dữ liệu kiểu gì?
- Int / float + string tạo ra dữ liệu kiểu gì?
- Int % float tạo ra dữ liệu kiểu gì? (dấu % được dùng để lấy phần dư trong một phép chia. Ví dụ 10/2 được 5 dư 0 nên 10%2=0; 10/3=3 dư 1 nên 10%3=1)
- int % int tạo ra dữ liệu kiểu gì?
Với tất cả các câu trả lời, phải có dẫn chứng chứng minh.
**Bài tập 4.3:** Chuyển từ kiểu nguyên về kiểu chuỗi
Sử dụng các phép toán + – * / % . (nối chuỗi), thêm vào mã lập trình ở chỗ bôi vàng để có được kết quả như hình minh hoạ.
**Bài tập 4.4:** Chuyển từ kiểu chuỗi về kiểu nguyên
Sử dụng các phép toán + – * / % . (nối chuỗi), thêm vào mã lập trình ở chỗ bôi vàng để có được kết quả như hình minh hoạ.
**Bài tập 4.5:** Chuyển từ kiểu nguyên về kiểu thực
Sử dụng các phép toán + – * / % . (nối chuỗi), thêm vào mã lập trình ở chỗ bôi vàng để có được kết quả như hình minh hoạ.
**Bài tập 4.6: **
- Dữ liệu kiểu chuỗi trong PHP có độ dài tối đa bao nhiêu ký tự? Giải thích.
- Dữ liệu kiểu số nguyên trong PHP có thể lớn đến bao nhiêu? Giải thích.
- Dữ liệu kiểu số thực trong PHP có thể lớn đến bao nhiêu? Giải thích.
Chú ý: không được đi “search” thông tin rồi điền vô, mà các bạn phải tự tìm cách “thực nghiệm” và đưa ra kết luận. Kể cả là kết luận dự đoán tôi cũng chấp nhận.
**“Ép” kiểu**
Qua các bài tập 4.3, 4.4, 4.5 các bạn có thể tự rút ra kết luận về một số cách thức chuyển đổi qua lại các kiểu dữ liệu khác nhau. Tuy nhiên, sẽ rất khó khăn để chuyển từ kiểu dữ liệu số thực về ngược lại kiểu dữ liệu số nguyên chỉ với các phép toán + – * / % và .
Trong thực tế, PHP cung cấp cho chúng ta một cách thức để chuyển kiểu dữ liệu nhanh gọn hơn, đó là “ép” kiểu. Để ép một kiểu dữ liệu bất kỳ về kiểu nguyên, bạn chỉ cần thêm toán tử (int) vào trước giá trị của nó.
Ví dụ:
Tương tự (float) dùng để ép kiểu về giá trị số thực và (string) để ép kiểu về giá trị chuỗi ký tự:
Hoặc như các bạn đã biết từ các bài tập trước, có thể dùng dấu nháy kép “ để ép kiểu của biến về string một cách đơn giản thế này:
<?php $a=12.34; $b = “$a”; var_dump($b); ?>
**Nói thêm về dữ liệu kiểu chuỗi**
String là kiểu dữ liệu mà bạn cần quan tâm nhiều hơn các kiểu khác, vì “mai mốt” bạn sẽ phải giải quyết nhiều vấn đề với chuỗi hơn bất cứ kiểu dữ liệu nào khác (trừ khi bạn là một chuyên gia toán hay vật lý học J).
Để tạo ra một giá trị kiểu string, chúng ta có thể dùng nháy đơn, nháy kép hoặc ép kiểu bằng cú pháp (string)…
<?php $s1 = ‘123456’; $s2 = “123456”; $s3 = (string)123456; ?>
Sử dụng dấu ‘ luôn giúp bạn tăng tốc chương trình so với việc dùng “, vì PHP “đối xử” với các giá trị đặt trong “ theo một cách riêng. PHP sẽ truy tìm xem trong chuỗi đó có dấu \ hay không, nếu có, nó sẽ diễn dịch dấu \ và ký tự theo sau thành những nội dung đặc biệt:
|Cặp ký tự||Ứng xử của PHP||Ghi chú|
|\n||Biến \n thành ký tự điều khiển “xuống dòng”||Tương tự như việc bạn gõ phím Enter|
|\t||Biến \t thành ký tự điều khiển “nhảy tab”||Tương tự như việc bạn gõ phím Tab|
|\’||\’ sẽ được giữ nguyên là \’||Nếu bạn bao chuỗi bằng dấu nháy đơn ‘ thì cặp ký tự \’ trong đó sẽ được biến thành một dấu nháy đơn ‘ . Còn khi bao chuỗi bằng nháy kép, nó sẽ GIỮ NGUYÊN GIÁ TRỊ|
|\”||Biến \” thành ký tự nháy kép ”||Đây là cách để bạn đưa một ký tự nháy kép vào chuỗi được bao bằng nháy kép|
|\$||Biến \$ thành ký tự $||Thông thường, $a đặt ở trong nháy kép sẽ được PHP diễn dịch thành giá trị của biến a. Nhưng khi bạn viết \$a thì chữ $a sẽ được ghi ra màn hình thay vì giá trị của biến a|
|\\||Biến \\ thành ký tự \||Do ký tự \ được PHP dò tìm như một ký tự điều khiển đặc biệt, nên khi muốn viết nó ra màn hình, bạn phải ghi là \\ . Cách làm này có tác dụng cả khi đặt chuỗi trong nháy kép cũng như nháy đơn|
Bài tập 4.7: Hãy dùng lệnh echo để viết ra màn hình các dòng chữ sau đây
Xin chao, toi la Long “/\/\e`o /\/\un”
Nen /\/guoi ta goi toi la Ty Phu Khong /\/ha`
Chú ý :
1) Chữ M trong « Meo Mun » và chữ N trong « Nguoi ta », « Khong Nha » được ghép bởi các ký tự gạch chéo /\/\ . Dấu huyền trong chữ Mèo Mun và chữ Nhà là dấu ` nằm chung với dấu ~, phía dưới nút Esc trên bàn phím.
2) Các bạn phải ĐỌC THẬT KỸ đề bài. Bài này có đố mẹo!
Bài tập 4.8 : Hãy dùng lệnh echo viết ra màn hình nội dung sau đây
*(bài này làm bình thường, không đố mẹo gì hết :D Mục đích để giúp các bạn làm quen với việc xử lý các ký tự đặc biệt như « ‘ \ $ khi lập trình thôi)*
<?php
echo ‘this is a simple string’;
echo ‘You can also have embedded newlines in
strings this way as it is
okay to do’;
// Outputs: Arnold once said: “I’ll be back”
echo ‘Arnold once said: “I\’ll be back”‘;
// Outputs: You deleted C:\*.*?
echo ‘You deleted C:\\*.*?’;
// Outputs: You deleted C:\*.*?
echo ‘You deleted C:\*.*?’;
// Outputs: This will not expand: \n a newline
echo ‘This will not expand: \n a newline’;
// Outputs: Variables do not $expand $either
echo ‘Variables do not $expand $either’;
?>
Các bạn nộp bài trước 12h trưa thứ 3, ngày 23/11/2010 nhé. Chúc các bạn học tốt.
## 27 Comments
[+ Add Comment](#respond)
## Leave a comment
## Liên kết nhanh
## Bài viết mới
-
[Bài 8 – Vòng lặp FOR, phức tạp nhưng đầy sức mạnh](http://hocphponline.com/blog/bai-8-vong-lap-for-phuc-tap-nhung-day-suc-manh/)
-
[Bài 7 – Câu lệnh điều kiện rút gọn, câu lệnh điều kiện phức hợp & câu lệnh rẽ nhánh](http://hocphponline.com/blog/bai-7-cau-lenh-dieu-kien-rut-gon-phuc-hop-re-nhanh/)
-
[Thảo luận về bài tập 6](http://hocphponline.com/blog/thao-luan-ve-bai-tap-6/)
-
[Bài 6 – Câu lệnh điều kiện](http://hocphponline.com/blog/cau-lenh-dieu-kien/)
-
[Thảo luận về bài tập 5](http://hocphponline.com/blog/thao-luan-ve-bai-tap-5/)
-
[Bài 5 – Hằng, biến biến và cách nhập dữ liệu từ bàn phím](http://hocphponline.com/blog/hang-bien-bien-va-cach-nhap-du-lieu-tu-ban-phim/)
-
[Thảo luận về bài tập 4 (tiếp theo)](http://hocphponline.com/blog/thao-luan-ve-bai-tap-4-tiep-theo/)
-
[Thảo luận về bài tập 4](http://hocphponline.com/blog/thao-luan-ve-bai-tap-4/)
-
[Bài 4 – Biến và kiểu dữ liệu](http://hocphponline.com/blog/bien-va-kieu-du-lieu/)
-
[Thảo luận về bài tập 3](http://hocphponline.com/blog/thao-luan-ve-bai-tap-3/)
## Phản hồi gần đây
- nguyenquoc on
[Thảo luận về bài tập 4 (tiếp theo)](http://hocphponline.com/blog/thao-luan-ve-bai-tap-4-tiep-theo/#comment-219)
- bobby on
[Bài 2 – Lập trình web bằng PHP là gì?](http://hocphponline.com/blog/lap-trinh-web-bang-php-la-gi/#comment-145)
- naxovi on
[Bài 2 – Lập trình web bằng PHP là gì?](http://hocphponline.com/blog/lap-trinh-web-bang-php-la-gi/#comment-121)
- Viet Anh on
[Thảo luận về bài tập 3](http://hocphponline.com/blog/thao-luan-ve-bai-tap-3/#comment-120)
- Viet Anh on
[Thảo luận về bài tập 2](http://hocphponline.com/blog/thao-luan-ve-bai-tap-2/#comment-119)
- no_handsome on
[Bài 1 – Một số cam kết trước khi học lập trình](http://hocphponline.com/blog/mot-so-cam-ket-truoc-khi-hoc-lap-trinh/#comment-117)
- Yan on
[Bài 1 – Một số cam kết trước khi học lập trình](http://hocphponline.com/blog/mot-so-cam-ket-truoc-khi-hoc-lap-trinh/#comment-114) [Quang Lâm](http://daihoc.com.vn/forum)on [Bài 2 – Lập trình web bằng PHP là gì?](http://hocphponline.com/blog/lap-trinh-web-bang-php-la-gi/#comment-109) [ngonchan](http://ngonchan.vndev.net)on [Bài 1 – Một số cam kết trước khi học lập trình](http://hocphponline.com/blog/mot-so-cam-ket-truoc-khi-hoc-lap-trinh/#comment-108)
- ysa on
[Bài 1 – Một số cam kết trước khi học lập trình](http://hocphponline.com/blog/mot-so-cam-ket-truoc-khi-hoc-lap-trinh/#comment-106)
#include "mcmxc"21/11/2010 at 2:17 PM
mình chưa hiểu ví dụ này:
Khi ta đã gán $a = 1
sau đó gán tiếp $a = ‘hello world’
rồi lại gán tiếp $a = 23.45
trình biên dịch sẽ dịch từ trên xuống dưới và lấy giá trị cuối cùng của $a là 23.45.
Vậy lệnh ép tham chiếu $a = &$a sẽ có tác dụng gì?
Vậy có phải ví dụ này là chỉ ra rằng trong php chúng ta o cần phải khai báo kiểu dữ liệu của biến và có thể thay đổi kiểu dữ liệu của biến 1 cách thaoi3 mái hay o?
Mong anh Mum trả lời.Xin cảm ơn.
MMun21/11/2010 at 2:22 PM
Qua ví dụ này, MMun muốn nói rằng biến trong PHP là không (cố) định kiểu, ví dụ từ đầu gán $a = 1 thì $a mang kiểu nguyên, nhưng sau đó vẫn gán một giá trị kiểu chuỗi vào cho nó v.v…
Trong khi đó, các ngôn ngữ như Pascal/C/C++/Java thì biến $a là kiểu nguyên thì không thể gán giá trị kiểu chuỗi vô (Pascal thì MMun chắc chắn, còn các ngôn ngữ kia thì MMun mới hỏi bà chị, bả nói vậy à, còn MMun không học nên cũng không chắc lắm
)
Aken21/11/2010 at 4:02 PM
Pascal/C/C++ đều thế, đã khai báo kiểu dữ liệu thì không được phép gán kiểu khác. Jave thì ko biết
$a = &$a ko phải là ép tham chiếu. “&” chỉ ra là word kế tiếp sẽ là Biến chứ ko phải là giá trị.
MMun21/11/2010 at 4:42 PM
Là sao ạ, mình ko hiểu lắm
Aken21/11/2010 at 7:24 PM
Mình trả lời bạn trên, quote lộn
#include "mcmxc"21/11/2010 at 7:04 PM
Theo mình biết,Pascal/C/C++ /Jave đều buộc khai báo tên biến và kiểu dữ liệu trước khi sử dụng .
$a = &$a ko phải là ép tham chiếu. “&” chỉ ra là word kế tiếp sẽ là Biến chứ ko phải là giá trị.—–> cái này mình không đồng tình với bạn vì theo mình biết cú pháp của PHP xây dựng trên nền C.Nên dấu & trước tên biến dùng để truyền 1 biến theo kiểu tham chiếu.Tức là giá trị của biến đó sẽ thay đổi sau khi hàm trả về.
Mình xin đưa ra ví dụ sau trên C++ :
int vd(int &n)
{
n=n+10;
return n;
}
Aken21/11/2010 at 7:27 PM
Mình tưởng bạn bắt đầu học lập trình nên nói nôm na cho dễ hiểu đâu biết bạn cũng là dân lập trình
sau & để chỉ ra đó là biến thì có nghĩa là truyền biến tham chiếu cho biến trc đó còn gì
Ngây Ngô20/12/2010 at 4:34 PM
PHP có tham chiếu mà
T.Dũng22/11/2010 at 2:31 PM
biến trong php nó hàm ý là kiểu tự do. Không phân biệt rõ ràng đó là kiểu gì nó chỉ rõ ràng khi bạn settype cho nó hoặc ép kiểu của nó. Trong c++/java biến tự do không thuộc kiểu nào thì là void. C++/java khi khai báo biến phải cho biết biến đó thuộc kiểu gì không được khai như php.
Để tránh phiền phức về kiểu trong php khi so sánh 2 kiểu giống nhau thì nên ép nó về cùng 1 kiểu để so sánh cho chính xác.
Dấu & trong biến thể hiện tham chiếu
////////////////
$a=7;
$a=&$b;
$b=8;
echo $a; ==> in ra 8
////nếu không có dấu &
$a=7;
$a=$b;
$b=8;
echo $a; ===>in ra 7
T.Dũng22/11/2010 at 3:06 PM
Ví dụ trên nhằm
Nếu có &
$a=7;
$b=8;
$a=&$b;
$a=9;
echo $b;==>in ra 9
Nếu không có &
$a=7;
$b=8;
$a=$b;
$a=9;
echo $b;==>in ra 8
Nghĩa là khi có dấu & vào thì biến $a thay đổi thì $b sẽ bị thay đổi theo.
mỗi 1 biến sẽ có 1 địa chỉ và địa chỉ này trỏ đến biến
ví dụ: $a=7; thì sẽ phát sinh 1 địa chỉ có tên là ababbc(gì đó chẳng biết) nhưng cái địa chỉ này trỏ đến số 7. Nếu khai báo $a=&$b thì bạn báo rằng thằng b có đại chỉ là ababbc. Do đó nếu mà ababbc trỏ đến giá trị nào thì thằng b sẽ có giá trị đó
Ai học C sẽ biết việc phức tạp của địa chỉ con trỏ .
Nói chung dễ hiểu nhất là khi muốn thay đổi giá trị biến trong hàm thì phải dùng &. Để hiểu rõ hơn bài này thì chắc các bạn phải chờ Mèo giới thiệu đến biến toàn cục và biến cục bộ mới hiểu thấu vấn đề này
Ngọc Thắng23/11/2010 at 3:47 AM
Các bạn đang học các vấn đề cơ bản thôi mà.
Sao lại lôi con trỏ vào đây. Các bạn làm thế chỉ khiến cho người mới học lập trình thêm hoang mang.
MMun23/11/2010 at 7:04 AM
Thôi kệ để các ban ý tranh luận với nhau cho vui, người học, nhất là học online thì có thể học từ nhiều nguồn và cần biết tiếp thu có chọn lọc
Ngọc Thắng23/11/2010 at 9:02 AM
Nếu anh Mun nói vậy thì nhào vô cho xôm tụ nào =))
“Nghĩa là khi có dấu & vào thì biến $a thay đổi thì $b sẽ bị thay đổi theo.”
$a=7;
$b=8;
$a=&$b;
$a=9;
echo $b;==>in ra 9
=> ko sai
thế bạn Dũng đã thử cái này chưa ?
$a=7;
$b=8;
$a=9;
$a=&$b;
echo $b;
mình học con trỏ bên C được cho biết chỉ là học để biết, vì tính bảo mật không cao. Nnlt java cũng loại bỏ con trỏ. Còn học để chọc ngoáy thứ gì đó thì tùy mọi người :-”
T.Dũng23/11/2010 at 11:35 AM
$a=7;
$b=8;
$a=9;
$a=&$b;
echo $b;
bạn thấy rằng trước khi gán $a=&$b; thì $a thay đổi nghĩa là trước đó $b không có liên quan gì đến $a. Sau đó $b mới được tham chiếu và chỉ mới tham chiếu thôi chứ nó chưa nhận diện được sự thay đổi.
Con trỏ rất phức tạp mình cũng đã nói rồi. Trong php không đặt năng vấn đề con trỏ nhưng phải biết sử dụng & để còn làm 1 số việc cần thiết
Con trỏ không phải bảo mật kém mà nó rất trù tượng và khó hiểu sử dụng nó khá rắc rối do đó những ngôn ngữ sau này đã hạn chế đụng đến nó
#include ''mcmxc''23/11/2010 at 4:48 PM
ngôn ngữ Java và PHP o hoàn toàn loại bỏ con trỏ vì theo mình được biết,dấu & cũng là 1 dạng con trỏ ,trỏ tới vùng nhớ chứa giá trị của biến!
Ngọc Thắng23/11/2010 at 2:00 PM
cái trên là tham chiếu, còn tham trị trong php thì sao hả bạn.
Mà con trỏ nó trỏ tới vùng lưu trữ bộ nhớ của biến, vậy đó không phải vấn đề bảo mật hả ?
MMun23/11/2010 at 2:02 PM
Con trỏ làm sao bỏ được ạ, cùng lắm thì nó được “che chắn” đi khiến cho lập trình viên không cần/không phải “nhìn thấy” và quản lý thôi. Ví dụ ngay như kiểu string trong PHP bản chất là mảng ký tự động, khi này trình thông dịch phải dùng con trỏ để quản lý nhưng coder thì không cần biết về điều đó.
Ngọc Thắng23/11/2010 at 2:09 PM
đúng rồi, bên C khi scanf một giá trị có một đoạn là &var_name, nó cũng thuộc về con trỏ. Em được cô dạy là con trỏ bên C có tính bảo mật không cao và chỉ được dạy lý thuyết, nhưng em vẫn tò mò muốn biết, ngoài cấp phát bộ nhớ, gán giá trị gián tiếp, tham chiếu, tham trị, thì còn chức năng nào khác. Em không nghĩ là con trỏ chỉ có nhiu đó chức năng.
MMun23/11/2010 at 2:18 PM
Theo anh thì nếu không có con trỏ sẽ không có bất cứ cái gì liên quan đến ngành máy tính. Con trỏ cũng quan trọng và không thể thiếu như + – * / vậy. Nhưng vẫn nhắc lại rằng nó đã được/bị “ẩn” đi. Giống như em nấu cơm thì ra siêu thị mua gạo về vo và nấu; muốn làm bánh thì lấy gạo đó xay ra thành bột rồi nhào nặn chứ không cần biết đến việc tồn tại trên đời một cái gọi là hạt thóc vậy à
Anh thì không rành nhiều về thuật toán, nhưng nếu anh nhớ không lầm thì các bài toán về tìm đường đi ngắn nhất (nền tảng để phát triển các tiện ích như trên diadiem.com hay Google MAP) đều dùng giải thuật liên quan đến con trỏ á.
#include "mcmxc"23/11/2010 at 6:15 PM
Mình xin giải thích rõ hơn về tham chiếu và tham trị như sau:
int vd_thamchieu(int &n)
{
n=n+10;
return n;
}
với hàm vd_thamchieu trên,bạn gọi nó và truyền giá trị n=5 như sau:
int a=vd_thamchieu(5) ;
vậy giá trị của a=15.
ngược lại với ví dụ tham trị sau:
int vd_thamtri(int n)
{
n=n+10;
return n;
}
với hàm vd_thamchieu trên,bạn gọi nó và truyền giá trị n=5 như sau:
int a=vd_thamtri(5) ;
vậy giá trị của a=5.
Ngoài ra,như anh MMun nói, trong PHP và cả Java đều o trực tiếp sử dụng con trỏ.Tuy nhiên,việc quản lý bộ nhớ,các kiểu dữ liệu như linklist,stak…ngầm định của trình biên dịch buộc phải sử dụng con trỏ.
Và thuật toán tìm đường đi ngắn nhất có tên là Dijkstra .Trên PHP thì mình o biết nhưng trên C/C++ nhất thiết phải dùng con trỏ với kiểu dữ liệu Queue để giải quyết.
/*Queue có thể cài đặt bằng mảng mà mình thì chưa làm nên o biết có giải quyết Dijkstra được o,nên thôi cứ phán bừa!
*/
Ngọc Thắng23/11/2010 at 9:01 PM
cả 2 kết quả của bạn đều ra 15 cả
Còn đây là code nêu rõ sự khác nhau của tham trị và tham chiếu trong C :
#include
int thamtri (int n)
{ return ++n; }
int thamchieu (int *n)
{ return ++*n; }
void main ()
{
int a = 10;
int b = thamtri (a);
int c = 10;
int d = thamchieu (&c);
printf (“Phan tham tri : a:%d b:%d \nPhan tham chieu : c:%d d:%d”,a,b,c,d);
}
T.Dũng23/11/2010 at 7:49 PM
ái chà C từa lưa vậy ta. Đây là php mà ta mcmxc bạn đã hiểu sai tác dụng dấu & rồi . Khi nào Mèo giới thiệu đến bài về các biến toàn cục hay cục bộ gì đó chắc lúc đó sẽ comment rõ hơn cho bạn dùng & như thế nào. Giờ mà nói thì loạn xà ngầu lên. 1 số thuật toán tìm đường đi ngắn nhất, ghét đôi, cây nhị phân tìm kiếm gì gì đó bạn có thể tìm hiểu vài cuốn toán rời rạc nâng cao của KHTN. Đọc đi tư duy của bạn sẽ nâng cấp 1 bậc nhưng cảnh báo trước trình độ phải là sinh viên năm 2 trở lên hãy đọc vì dưới nửa thì khó mà tiếp thu
#include "mcmxc"23/11/2010 at 8:19 PM
Có vẻ a T.Dũng học từ khá lâu rồi.Bây h người ta gọi môn đó là Lý Thuyết Đồ Thị.
Cái tên toán rời rạc nâng cao chắc ít nhất 5 năm rồi người ta o dùng tới!
Riêng về tác dụng dấu & ,sau khi tham khảo nhiều nguồn thì em vẫn xin giữ quan điểm của em.
Mong rằng tới bài Tầm vực của biến chúng ta sẽ hiểu dấu & một cách chính xác và đầy đủ nhất.
Xin cảm ơn tất cả mọi người!
Viper9x23/11/2010 at 8:32 PM
Mấy hôm nay bận quá, chắc mai mới đọc bài này được
MMun23/11/2010 at 11:15 PM
Từa lưa hết rồi
Viper9x27/11/2010 at 7:04 PM
Anh Mèo ơi, em và mấy người bạn thấy anh ra nhiều bài tập quá, mà ra nhiều bài tập nhìn cũng nản nản anh àh
![ :)](http://hocphponline.com/blog/wp-includes/images/smilies/icon_smile.gif)
Anh xem xét việc giảm lượng bài tập tí nhé
MMun27/11/2010 at 7:44 PM
Lười làm bài thì không giỏi được đâu em ạ.
Học ở đây có bắt ép làm bài đâu, bọn em thấy nhiều quá không làm được thì cứ làm ít. Anh comment dựa trên lời giải của bọn em mà


text:
Gian hàng bán
Rao vặt
Hỏi đáp
Thêm
Danh sách gian hàng
Tin tức từ Vatgia.com
Đánh giá sản phẩm
BaoKim.vn
CucRe.vn
MyTour.vn
Nhanh.vn
123Doc.vn
WebBNC.net
IKI.vn
Sản phẩm
Sản phẩm
Rao vặt
Hỏi đáp
Cửa hàng
Tìm trong danh mục
Dịch vụ sửa chữa máy tính bảng
Linh kiện iPad
Linh kiện máy tính bảng
Phụ kiện i-Pad (i-Pad Accessories)
Phụ kiện máy tính bảng (Tablet Accessories)
Hỗ trợ
Tuyển dụng
Nạp tiền
Đăng ký
Đăng ký thành viên
Đăng ký gian hàng
Đăng nhập
Tên truy cập:
Mật khẩu:
Nhớ mật khẩu
Quên mật khẩu
Toàn bộ danh mục
Bao da bàn phím Bluetooth cho Samsung Galaxy Tab 2 P3100 P3110 P6200
Báo lỗi sản phẩm
So sánh với sản phẩm khác
Thông số kỹ thuật
Xem chi tiết
Hãng sản xuất:
--
Loại linh kiện:
Bao da
Xuất xứ:
Hongkong
Cùng Hãng sản xuất
Bao da BB3 xoay 360 cho...
220.000 VNĐ
Bao da Asus Memo Pad 8
190.000 VNĐ
Bao da Samsung Galaxy Tab 3...
190.000 VNĐ
Bao da Samsung Galaxy Tab 2...
150.000 VNĐ
Bao da SamSung Galaxy Tab 3 8...
399.000 VNĐ
Type Cover Microsoft Surface
2.900.000 VNĐ
Bao Da Asus Fonepad ME371MG
190.000 VNĐ
Bao da Asus FonePad ME371
250.000 VNĐ
Bao da Samsung Galaxy Tab 3...
200.000 VNĐ
Cùng mức giá bán
iPush D2 MELE I6 Multi-Media...
590.000 VNĐ
Bao da ICarer Slim Series iPad...
600.000 VNĐ
Bao Da Viva cho Samsung Galaxy...
650.000 VNĐ
Bàn phím Daza M901
588.000 VNĐ
Bao da Galaxy Note 8 Viva...
650.000 VNĐ
Bao da YooBao Galaxy Note 10.1...
650.000 VNĐ
Adapter HDMI Samsung Galaxy...
650.000 VNĐ
Bao da Nexus 7 I-BLASON Duview
600.000 VNĐ
Bao da cá sấu Borofone iPad 2
600.000 VNĐ
Có
1.174
sản phẩm
Linh kiện, phụ kiện máy tính bảng
Phụ kiện máy tính bảng (Tablet Accessories) (Xem tất cả)
Tìm kiếm nâng cao
Theo khoảng giá (VNĐ)
Từ :
Đến :
Theo Tỉnh/ Thành phố
Hà Nội
(463)
Hồ Chí Minh
(780)
Hà Nội 2
(262)
Hải Phòng
(2)
Đà Nẵng
(2)
Bà Rịa - Vũng Tàu
(1)
Bình Dương
(2)
Cần Thơ
(2)
Gia Lai
(6)
Khánh Hòa
(1)
Thái Bình
(1)
Đồng Nai
(1)
... Xem thêm
Hãng sản xuất
--
(622)
Belk
(22)
Book Cover
(11)
Oskar
(9)
Rock
(9)
USAMS
(22)
Baseus
(7)
Hoco
(8)
OEM
(7)
Pisen
(4)
Samsung
(4)
Case-mate
(1)
Cygnett
(3)
Kaku
(2)
Kalaideng
(3)
Viva
(2)
Voynich
(4)
... Xem thêm
Loại linh kiện
Bao da
(571)
Cặp, túi
(71)
Case
(14)
Giá đỡ
(14)
Miếng dán bảo vệ
(30)
Sạc
(13)
Bút cảm ứng (Stylus)
(8)
cảm ứng
(7)
Dây cáp
(6)
Keyboard
(11)
Pin
(7)
Adapter
(2)
Dock
(1)
... Xem thêm
Xuất xứ
--
(442)
Hongkong
(41)
Trung Quốc
(232)
Mỹ
(6)
Singapore
(20)
Việt Nam
(1)
Đài Loan
(5)
Bạn muốn thêm lựa chọn ?
Mở rộng
Các từ khóa liên quan.
samsung
,
dien thoai samsung
,
gia dien thoai samsung
,
samsung galaxy tab
,
samsung galaxy tab 1000
,
samsung galaxy tablet
,
samsung galaxy tab p1000
,
samsung galaxy tab 10.1
,
samsung galaxy tab p100
,
ipad 2
,
samsung galaxy tab 1010
,
bluetooth cho samsung
,
bao samsung galaxy tab
,
sac cho samsung galaxy
,
baoda samsung galaxy tab
,
pin cho samsung galaxy
,
vo cho samsung galaxy
,
samsung galaxy tab 2.
,
samsung galaxy tab 2.0
,
galaxy s4
Bao da bàn phím Bluetooth cho Samsung Galaxy Tab 2 P3100 P3110 P6200 - So sánh giá
2 mới từ
650.000 đ
Lịch sử giá
0.0
/
0
đánh giá
Xếp hạng
154
/ 1.173
So sánh giá
Thông số kỹ thuật
Nhận xét
Đánh giá
Hỏi đáp
Hình ảnh
Bạn nghĩ gì về sản phẩm này?
Gian hàng bán
|
Cá nhân bán
Tích cực
Giá tăng dần
Tình trạng
Xuất xứ
Thuế
Bảo hành
Toàn quốc (2)
Hồ Chí Minh (1)
Hà Nội (1)
Nơi bán:
HCM (1)
HN (1)
Khác
Gian hàng đảm bảo
650.000 đ
Cập nhật: 14 ngày 22 giờ trước
Xem chi tiết
Mới - Chưa VAT
BH: Không có
HCM
:
Cty ĐIỆN THOẠI VIỄN THỊNH (vienthinh)
22
lượt mua thành công
650.000 đ
Cập nhật: 2 ngày 10 giờ trước
Xem chi tiết
Mới - Có VAT
BH: Không có
HN
:
Công Ty TNHH Điểm Sáng Việt (diemsangviet)
Người mua được quyền lợi gì khi mua hàng từ gian hàng đảm bảo?
So sánh gian hàng đảm bảo và gian hàng thường?
Xây dựng Vatgia.com: Vì một cộng đồng an toàn trên Internet.
Mất tiền oan khi mua bán qua mạng
Cảnh giác với những trò lửa đảo trên Internet
Ở Việt Nam có những loại lừa đảo nào trên Internet?
Nhận xét về Bao da bàn phím Bluetooth cho Samsung Galaxy Tab 2 P3100 P3110 P6200
Rao vặt liên quan đến Bao da bàn phím Bluetooth cho Samsung Galaxy Tab 2 P3100 P3110 P6200. -
Xem thêm
Bàn phím không dây Bluetooth cho Galaxy Note 10.1" 2014 Edition P600/P601
(750.000 VNĐ)
Các sản phẩm khác.
Bao da BB3 xoay 360 cho samsung tab...
220.000 VNĐ
Bao da nắp gập Nexus 7 (Nhiều màu)
200.000 VNĐ
Bao da Asus Memo Pad 8
190.000 VNĐ
Bao da Book Cover Galaxy Tab 2 7.0 P3100
190.000 VNĐ
Bao da Samsung Galaxy Tab 3 T3100 /...
190.000 VNĐ
Bao da GALAXYTab 3 P3200 P3210
190.000 VNĐ
Bao da máy tính bảng Google Nexus 7
179.000 VNĐ
Bao da Samsung Galaxy Tab 2 P3100 xoay...
150.000 VNĐ
Bao da Samsung Galaxy Tab 2 7.0 - Rock...
400.000 VNĐ
Bao da SamSung Galaxy Tab 3 8 inch Rock...
399.000 VNĐ
Type Cover Microsoft Surface
2.900.000 VNĐ
Bao da OEM Asus FonePad HD7 inch ME173X
250.000 VNĐ
Bao Da Asus Fonepad ME371MG
190.000 VNĐ
Bao da Belk Samsung Galaxy Tab 2 7.0...
200.000 VNĐ
Bao da Samsung Galaxy Tab 3 8.0...
200.000 VNĐ
Bao da YooBao Samsung Galaxy Tab 2 10.1...
200.000 VNĐ
Bao da Galaxy Note 8.0 Hoco N5100
250.000 VNĐ
Sạc máy tính bản 5v-2A ( đầu Jack 2,5 mm...
120.000 VNĐ
Bao da Galaxy Note 8.0 N5100 Rock
300.000 VNĐ
Bao da máy tính bảng Momo 7
100.000 VNĐ
Bao da P7510-38 xoay 360 cho Samsung...
250.000 VNĐ
Bao da Happymori cho iPad (Màu đỏ)
220.000 VNĐ
Bao da Icare iPad 2
880.510 VNĐ
Bao da Nexus 7 thế hệ 2 USAMS
200.000 VNĐ
Bao da Asus FonePad ME371
250.000 VNĐ
Bao da Samsung Galaxy Tab 3 7.0...
200.000 VNĐ
Bao da cho Samsung Galaxy tab 10.1''
200.000 VNĐ
Bao da Samsung Galaxy Tab 4 7.0
250.000 VNĐ
Hàng công nghệ
>
Máy tính, linh kiện
>
Linh kiện, phụ kiện máy tính bảng
>
Phụ kiện máy tính bảng (Tablet Accessories)
(
phu kien may tinh bang
,
phu kien tablet
,
phụ kiện tablet
,
Phụ kiện máy tính bảng
)
Trang thông tin, giá cả, cửa hàng bán, bình chọn, hỏi đáp về
Bao da bàn phím Bluetooth cho Samsung Galaxy Tab 2 P3100 P3110 P6200
trong mục
Phụ kiện máy tính bảng (Tablet Accessories)
Vatgia.com
|
Sản phẩm
|
Rao vặt
|
Hỏi đáp, tư vấn tiêu dùng
|
Đánh giá (Review)
|
Lưu trữ rao vặt
|
iPad 3
|
Xe may
|
Dien thoai
|
Netbook
|
Máy tính laptop
|
Galaxy S5
|
Máy ảnh số
|
iPhone
|
Máy nghe nhạc MP3
|
Galaxy Tab
|
Tivi LCD
|
Mainboard
|
RAM
|
Màn hình LCD
|
Điều hòa
|
BlackBerry
|
Máy chấm công
|
Máy chiếu
|
Máy photocopy
|
Bat dong san
|
Can thue nha
|
Galaxy S4
|
iPhone 5
|
Sách
|
San go cong nghiep
|
iPhone 5S
|
Ao cuoi
|
Sàn gỗ công nghiệp
|
Ô tô
|
O to
|
Oto
|
Xe hơi
|
Tủ rack
|
Máy chơi Game
|
Máy ảnh cơ chuyên dụng
|
Mặt nạ
|
Bóng Tennis
|
Máy xay sinh tố
|
Kiểu dáng
|
Bột giặt
|
Bộ đo xung tín hiệu
|
Máy đúc công nghiệp
|
Nước khoáng
|
Du học
Giới thiệu
|
Hướng dẫn
|
Quy chế hoạt động
|
Chính sách bảo mật thông tin
Công ty Cổ phần Vật Giá Việt Nam. Số GCNDT: 011032001615, cấp ngày 21/06/2012, nơi cấp: UBND thành phố Hà Nội. SĐT: 04 7308 0008
Trụ sở chính: Lê Đại Hành, Hai Bà Trưng, Hà Nội - Chi nhánh Hồ Chí Minh: Đường Lữ Gia, Phường 15, Quận 11, Hồ Chí Minh

WARC-Type: response

Content-Type: application/http; msgtype=response

Server: Apache

Set-Cookie: history_product=3322617%7C0; path=/

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Vary: Accept-Encoding

Content-Encoding: gzip

Connection: close

Content-Type: text/html; charset=UTF-8


text:
Chuyên mục: Từ trường và Cảm ứng điện từ
Để download tài liệu Ôn tập từ trường của dòng điện các bạn click vào nút download bên dưới.
Mời bạn truy cập vào kho download tài nguyên với thư viện giáo án điện tử, thư viện đề kiểm tra - trắc nghiệm và nhiều tài nguyên quý giá khác nữa.
Nếu bạn thích tài liệu Ôn tập từ trường của dòng điện , click nút "Cảm ơn" hoặc "Thích" và chia sẻ cho bạn bè mình.
Chúng tôi hiện có hơn 60 nghìn tài liệu để bạn tìm

markdown:
|
||
|
Chuyên mục:
[Từ trường và Cảm ứng điện từ](http://thuvienvatly.com/home/component/option,com_remository/Itemid,215/func,select/id,253/)
Để download tài liệu
**Ôn tập từ trường của dòng điện ** các bạn click vào nút download bên dưới.
Mời bạn truy cập vào
[ với thư viện kho download tài nguyên](http://thuvienvatly.com/home/content/view/1894/43/)
Nếu bạn thích tài liệu
**Ôn tập từ trường của dòng điện **, click nút "Cảm ơn" hoặc "Thích" và chia sẻ cho bạn bè mình.
|
► Like TVVL trên Facebook nhé!
|
|
|
|
|
|
|
## Cùng mục:
|
|
## Cùng chia sẻ bởi:
Chúng tôi hiện có hơn
**60 nghìn** tài liệu để bạn tìm
![]()
![]()

WARC-Truncated: length

Server: nginx