Python danh sách các con trỏ hàm

Chương trình hoán đổi các giá trị biến thực vì hàm truy cập chúng theo địa chỉ sử dụng con trỏ. Ở đây chúng ta sẽ thảo luận về quá trình chương trình

  1. Chúng ta khai báo hàm chịu trách nhiệm hoán đổi giá trị của hai biến, hàm này nhận hai con trỏ nguyên làm tham số và trả về bất kỳ giá trị nào khi nó được gọi
  2. Trong hàm main, chúng ta khai báo và khởi tạo hai biến số nguyên (‘m’ và ‘n’), sau đó chúng ta in ra các giá trị tương ứng
  3. Chúng ta gọi hàm hoán đổi () bằng cách chuyển địa chỉ của hai biến làm đối số bằng ký hiệu dấu và. Sau đó, chúng tôi in các giá trị hoán đổi mới của các biến
  4. Ở đây chúng ta định nghĩa nội dung hàm swap() lấy hai địa chỉ biến số nguyên làm tham số và khai báo một biến số nguyên tạm thời dùng làm hộp lưu trữ thứ ba để lưu một trong các biến giá trị sẽ được đưa vào biến thứ hai
  5. Lưu nội dung của biến đầu tiên được trỏ bởi 'a' trong biến tạm thời
  6. Lưu trữ biến thứ hai được chỉ định bởi b trong biến đầu tiên được chỉ định bởi a
  7. Cập nhật biến thứ hai (được trỏ bởi b) bằng giá trị của biến thứ nhất được lưu trong biến tạm thời

Các hàm có tham số mảng

Trong C, chúng ta không thể truyền mảng theo giá trị cho hàm. Trong khi đó, tên mảng là một con trỏ (địa chỉ) nên ta chỉ truyền tên mảng cho hàm nghĩa là truyền con trỏ vào mảng

Ví dụ, chúng tôi xem xét chương trình sau

int add_array (int *a, int num_elements);
int main() {
  int Tab[5] = {100, 220, 37, 16, 98};
  printf("Total summation is %d\n", add_array(Tab, 5)); 
  return 0;}
int add_array (int *p, int size) {
  int total = 0;
  int k;
  for (k = 0; k < size; k++) {
    total += p[k];  /* it is equivalent to total +=*p ;p++; */}
 return (total);}

đầu ra

 Total summation is 471

Ở đây, chúng tôi sẽ giải thích mã chương trình với các chi tiết của nó

Python danh sách các con trỏ hàm

  1. Chúng ta khai báo và định nghĩa hàm add_array() lấy địa chỉ mảng (con trỏ) với số phần tử của nó làm tham số và trả về tổng cộng tích lũy của các phần tử này. Con trỏ được sử dụng để lặp lại các phần tử mảng (sử dụng ký hiệu p[k]) và chúng tôi tích lũy tổng trong một biến cục bộ sẽ được trả về sau khi lặp lại toàn bộ mảng phần tử
  2. Chúng ta khai báo và khởi tạo một mảng số nguyên có 5 phần tử là số nguyên. Chúng tôi in tổng kết bằng cách chuyển tên mảng (đóng vai trò là địa chỉ) và kích thước mảng cho hàm add_array() được gọi làm đối số

Các hàm trả về một mảng

Trong C, chúng ta có thể trả về một con trỏ tới một mảng, như trong chương trình sau

#include <stdio.h>
int * build_array();
int main() {
  int *a;
  a = build_array(); /* get first 5 even numbers */
  for (k = 0; k < 5; k++)
    printf("%d\n", a[k]);
  return 0;}
int * build_array() {
  static int Tab[5]={1,2,3,4,5};
   return (Tab);}

đầu ra

1
2
3
4
5

Và sau đây, chúng ta sẽ thảo luận về chi tiết chương trình

Python danh sách các con trỏ hàm

  1. Chúng tôi xác định và khai báo một hàm trả về một địa chỉ mảng chứa một giá trị số nguyên và không nhận bất kỳ đối số nào
  2. Chúng tôi khai báo một con trỏ số nguyên nhận toàn bộ mảng được tạo sau khi hàm được gọi và chúng tôi in nội dung của nó bằng cách lặp lại toàn bộ mảng năm phần tử

Lưu ý rằng một con trỏ, không phải một mảng, được định nghĩa để lưu trữ địa chỉ mảng được trả về bởi hàm. Cũng lưu ý rằng khi một biến cục bộ được trả về từ một hàm, chúng ta phải khai báo nó là tĩnh trong hàm

Con trỏ hàm

Như chúng ta đã biết theo định nghĩa rằng con trỏ trỏ đến một địa chỉ trong bất kỳ vị trí bộ nhớ nào, chúng cũng có thể trỏ đến phần đầu của mã thực thi dưới dạng các hàm trong bộ nhớ.
Một con trỏ tới hàm được khai báo với dấu * , câu lệnh chung của khai báo nó là.

return_type (*function_name)(arguments)

Bạn phải nhớ rằng các dấu ngoặc đơn xung quanh (*tên_hàm) rất quan trọng vì không có chúng, trình biên dịch sẽ nghĩ tên_hàm đang trả về một con trỏ kiểu_trả_về.
Sau khi định nghĩa con trỏ hàm, chúng ta phải gán nó cho hàm. Ví dụ, chương trình tiếp theo khai báo một hàm thông thường, định nghĩa một con trỏ hàm, gán con trỏ hàm cho hàm thông thường và sau đó gọi hàm thông qua con trỏ.

#include <stdio.h>
void Hi_function (int times); /* function */
int main() {
  void (*function_ptr)(int);  /* function pointer Declaration */
  function_ptr = Hi_function;  /* pointer assignment */
  function_ptr (3);  /* function call */
 return 0;}
void Hi_function (int times) {
  int k;
  for (k = 0; k < times; k++) printf("Hi\n");}

đầu ra

Hi
Hi
Hi

Python danh sách các con trỏ hàm

  1. Chúng tôi xác định và khai báo một hàm tiêu chuẩn in văn bản Hi k lần được chỉ định bởi tham số lần khi hàm được gọi
  2. Chúng tôi định nghĩa một hàm con trỏ (với khai báo đặc biệt của nó) nhận một tham số nguyên và không trả về bất kỳ thứ gì
  3. Chúng tôi khởi tạo chức năng con trỏ của mình với Hi_function có nghĩa là con trỏ trỏ đến Hi_function()
  4. Thay vì gọi hàm tiêu chuẩn bằng cách nhấn vào tên hàm với các đối số, chúng ta chỉ gọi hàm con trỏ bằng cách chuyển số 3 làm đối số, và thế là xong

Hãy nhớ rằng tên hàm trỏ đến địa chỉ bắt đầu của mã thực thi giống như tên mảng trỏ đến phần tử đầu tiên của nó. Do đó, các hướng dẫn như function_ptr = &Hi_function và (*funptr)(3) là đúng.
LƯU Ý. Việc chèn toán tử địa chỉ & và toán tử gián tiếp * trong khi gán hàm và gọi hàm là không quan trọng.

Mảng con trỏ hàm

Một mảng các con trỏ hàm có thể đóng vai trò chuyển đổi hoặc câu lệnh if để đưa ra quyết định, như trong chương trình tiếp theo

Bạn có thể có một danh sách các hàm trong Python không?

Trong Python, bạn có thể sử dụng hàm danh sách để tạo một tập hợp có thể thao tác cho phân tích của bạn. Bộ sưu tập dữ liệu này được gọi là một đối tượng danh sách. Mặc dù tất cả các phương thức đều là các hàm trong Python, nhưng không phải tất cả các hàm đều là phương thức.

Con trỏ hàm trong Python là gì?

Không, chúng tôi không có bất kỳ loại Con trỏ nào trong ngôn ngữ Python . Các đối tượng được truyền cho hàm theo tham chiếu. Cơ chế được sử dụng trong Python giống hệt như truyền con trỏ theo giá trị trong C. Chúng tôi có các biến Python không phải là con trỏ.

Tất cả các chức năng trong Python là gì?

Hàm tích hợp trong Python

Biến có phải là con trỏ trong Python không?