Các Phép Toán Trên Con Trỏ

Sign in Sign in Welcome!Log into your account your username your password Forgot your password? Password recovery Recover your password your email Search Wednesday, December 31, 2025
  • Sign in / Join
Sign in Welcome! Log into your account your username your password Forgot your password? Get help Password recovery Recover your password your email A password will be e-mailed to you. sinhvientot.net sinhvientot.net sinhvientot.net sinhvientot.net Home Lập trình C/C++ Các phép toán trên con trỏ Facebook Twitter Pinterest WhatsApp

Phép gán con trỏ

Hai con trỏ cùng kiểu có thể gán cho nhau.

Ví dụ

int a, *p, *q ;

float *f;  a = 5 ;

p = &a ; q = p ; /* đúng */

f = p ; /* sai do khác kiểu */

Ta cũng có thể ép kiểu con trỏ theo cú pháp:

(<Kiểu kết quả>*)<Tên con trỏ>  Chẳng hạn, ví dụ trên được viết lại:

int a, *p, *q ;

float *f;

a = 5 ; p = &a ; q = p ; /* đúng */

f = (float*)p; /* Đúng nhờ ép kiểu*/

Phép toán cộng và trừ trên con trỏ

  • Chỉ có thể thực hiện phép toán cộng và trừ trên con trỏ

int a=50;

int *pa;

pa = &a;

pa ++;

  • Giả sử biến a được lưu trữ tại địa chỉ 1000
  • pa lưu giá trị 1000. Vì số nguyên có kích thước là  2  bytes, nên sau biểu thức  “pa++;” pa sẽ có giá trị là 1002 mà không là 1001
++pa  hoặc pa++ Trỏ đến số nguyên kế tiếp đứng sau a
–pa  hoặc pa– Trỏ đến số nguyên kế tiếp đứng trước a
pa + i Trỏ đến số nguyên thứ i đứng sau a
pa – i Trỏ đến số nguyên thứ i đứng trước a
++*pa  hoặc (*pa)++ Sẽ tăng giá trị a  thêm 1 nếu pa đang trỏ đến a.
–*pa  hoặc (*pa)– Sẽ giảm giá trị a  bớt 1 nếu pa đang trỏ đến a.
*pa++ Sẽ tác động đến giá trị của số nguyên kế tiếp sau a
  • Mỗi lần con trỏ được tăng trị, nó trỏ đến ô nhớ của phần tử kế tiếp
  • Mỗi lần con trỏ được giảm trị, nó trỏ đến ô nhớ của phần tử đứng trước nó
  • Tất cả con trỏ sẽ tăng hoặc giảm trị theo kích thước của kiểu dữ liệu mà chúng đang trỏ đến

Cộng, trừ con trỏ với một số nguyên

Ta có thể cộng (+), trừ (-) 1 con trỏ với 1 số nguyên N nào đó; kết quả trả về là 1 con trỏ.

Con trỏ này chỉ đến vùng nhớ cách vùng nhớ của con trỏ hiện tại N phần tử.

Ví dụ: Cho đoạn chương trình sau:

int *pa; 

pa = (int*) malloc(20); /* Cấp phát vùng nhớ 20 byte=10 số nguyên*/ 

int *pb, *pc; 

pb = pa + 7;

pc = pb – 3; 

Lúc này hình ảnh của pa, pb, pc như sau:

0 1 2 3 4 5 6 7 8 9
pa pc pb

Lưu ý:

  • Ta không thể cộng 2 con trỏ với nhau;
  • Phép trừ 2 con trỏ cùng kiểu sẽ trả về 1 giá trị nguyên (int). Đây chính là khoảng cách (số phần tử) giữa 2 con trỏ đó. Chẳng hạn, trong ví dụ trên pc-pa=4.

So sánh con trỏ

  • Hai con trỏ có thể được so sánh trong một biểu thức quan hệ nếu chúng trỏ đến các biến có cùng kiểu dữ liệu
  • Giả sử ptr_a và ptr_b là hai biến con trỏ trỏ đến các phần tử dữ liệu a và b. Trong trường hợp này, các phép so sánh sau là có thể:

Sosanhcontro

Con trỏ NULL

là con trỏ không chứa địa chỉ nào cả. Ta có thể gán giá trị NULL cho 1 con trỏ có kiểu bất kỳ.

RELATED ARTICLESMORE FROM AUTHOR

C/C++

Sự khác nhau giữa Inline function và Macro trong C

C/C++

Trong ngôn ngữ C/C++ có bao nhiêu vùng nhớ (Memory layout)

C/C++

Cấu trúc dữ liệu danh sách nhân viên

C/C++

Tổng quan File trong C

C/C++

Cấu trúc kiểu dữ liệu sinh viên

C/C++

Cấu trúc mô tả một điểm trên tọa độ xOy

LEAVE A REPLY Cancel reply

Log in to leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Danh sách các bài học

Các kiểu dữ liệu cơ bản trong ngôn ngữ C/C++

Mr Good - April 16, 2016 0

Hướng dẫn Tạo Project Visual C++ trong Visual Studio 2012

April 16, 2016

Biến-Hằng-Câu lệnh và biểu thức trong C/C++

April 16, 2016

Cấu trúc IF-ELSE

April 16, 2016

Cấu trúc switch – case

April 16, 2016

Vòng lặp For

April 16, 2016

Cấu trúc While, Do-while

April 16, 2016

Cách sử dụng hàm trong lập trình

April 16, 2016

Mảng một chiều

April 16, 2016 Load more

Bài viết mới nhất

Download

Download Cisco Packet Tracer

Windows 10

Hướng dẫn cài đặt webserver trên localhost để chạy wordpress

HPE

Hướng dẫn cấu hình IP ILO máy chủ HP DL380 Gen10

CentOS

CentOS 8 – Giới thiệu về hệ điều hành Linux (P1)

Load more © Copyright 2016, All Rights Reserved. Donations are always appreciated! MEW: 0x296f1a39d5Ca3cb83C76724eA38af3B90B90109D MORE STORIES

TELNET – OPEN SSH – VNC trên Linux

Mr Good - April 23, 2016 0

Hướng dẫn cài đặt cơ bản Centos 6.5

Võ Tình Thương - January 17, 2018 0

Từ khóa » Toán Tử Trong Con Trỏ