C - lewat parameter

M

Membantu

Guest
Hai,

Bagaimana kita bisa mengirimkan parameter ke fungsi?

.
.
array (3);
.
.
void array (const int ukuran)
(
int Ary [size] = (0);
)

Apakah tidak bekerja pada kode ini ...Bagaimana bisa saya lakukan di kode ini??Siapapun dapat membantu saya ...

Terima ..

 
Array dimensi harus konstanta waktu kompilasi (kecuali jika Anda menggunakan gcc, yang menyediakan fitur yang diperpanjang).
Anda harus menggunakan malloc atau calloc, dan ingat untuk menelepon gratis sebelum fungsi kembali.

Apa itu array (3)?

 
echo47 wrote:

Array dimensi harus konstanta waktu kompilasi (kecuali jika Anda menggunakan gcc, yang menyediakan fitur yang diperpanjang).

Anda harus menggunakan malloc atau calloc, dan ingat untuk menelepon gratis sebelum fungsi kembali.Apa itu array (3)?
 
Kode:

# include <stdlib.h>void array (const int ukuran)

(

int * Ary;Ary = calloc (ukuran, sizeof (* Ary));

/ * ...
* /

gratis (Ary);

)
 
Hai,

Cara menguji kesalahan dari calloc ()???

Kode i coba seperti ini, tapi punya kesalahan .....itu bisa hilang adalah sesuatu ... kode ini ..

# include <stdlib.h>
void array (const int);

int main ()
(
array (3);
return 0;
) / / end main

void array (const int ukuran)
(
int * Ary;

Ary = calloc (ukuran, sizeof (* Ary));
/ * ...* /
gratis (Ary);
)

 
Kompilasi yang baik-baik saja di sini.Apa pesan error yang Anda dapatkan?

Berikut adalah contoh dengan pengecekan error.Ini juga akan mencetak array sebelum dan setelah menulis beberapa angka ke dalamnya:
Kode:

# include <stdio.h>

# include <stdlib.h>void array (const int ukuran)

(

int * Ary, n;Ary = calloc (ukuran, sizeof (* Ary));

if (! Ary)

(

printf ( "calloc gagal \ n");

return;

)for (n = 0; n <ukuran; n )

printf ( "% d", Ary [n]);

printf ( "\ n");for (n = 0; n <ukuran; n )

Ary [n] = n 100;for (n = 0; n <ukuran; n )

printf ( "% d", Ary [n]);

printf ( "\ n");gratis (Ary);

)int main (void)

(

array (3);

return 0;

)
 
Hai,

Saya menggunakan Microsoft Visual C compiler ..# include <stdio.h>
# include <stdlib.h>

void array (const int ukuran)
(
int * Ary, n;Ary = calloc (ukuran, sizeof (* Ary)); / / error C2440: '=': tidak dapat mengkonversi dari 'void *' to 'int *'

if (! Ary)
(
printf ( "calloc gagal \ n");
return;
)

for (n = 0; n <ukuran; n )
printf ( "% d", Ary [n]);
printf ( "\ n");

for (n = 0; n <ukuran; n )
Ary [n] = n 100;

for (n = 0; n <ukuran; n )
printf ( "% d", Ary [n]);
printf ( "\ n");

gratis (Ary);
)

int main (void)
(
array (3);
return 0;
)menunjukkan ada kesalahan .....

 
Anda berpikir itu kompiler C program, bukan program C.Bahasa berbeda.Cobalah untuk menemukan pengaturan di VC yang memilih C modus.

 
Hai,

Nevermind, saya akan mencoba lagi nanti.What i dapat melihat adalah 3 garis penting ada ...

void array (const int ukuran)
(
int * Ary;

Ary = calloc (ukuran, sizeof (* Ary));
/ * ...* /
gratis (Ary);
)

Dapatkah Anda membantu saya untuk menjelaskan garis ini apa itu lakukan ...
Ary = calloc (ukuran, sizeof (* Ary));
dan
gratis (Ary);

Thanks ...

 
Ary = calloc (ukuran, sizeof (* Ary));
objects, each of whose size is sizeof(*Ary)
.

Fungsi yang calloc mengalokasikan ruang untuk ukuran
sebuah array objek, masing-masing ukuran yang sizeof (* Ary).Ruang adalah untuk semua bit diinisialisasi nol.Mengembalikan fungsi baik pointer nol (terjadi error) atau pointer ke ruang yang dialokasikan.sizeof (* Ary)
.

Itu adalah ukuran dari salah satu elemen dari Ary.gratis (Ary);
to be deallocated, that is, made available for further allocation.

Fungsi bebas menyebabkan ruang yang ditunjukkan oleh Ary
untuk deallocated, yaitu, dibuat tersedia untuk alokasi lebih lanjut.Anda mungkin dapat menghilangkan C pesan error seperti ini:

Ary = (int *) calloc (ukuran, sizeof (* Ary));Pastikan Anda telah bernama something.c berkas sumber anda dan bukan something.cpp, karena cpp dapat memilih C compiler.

 
Q1)
Apa yang berbeda jika kita mencoba untuk menempatkan
Ary = (int *) calloc (ukuran, sizeof (int));
Mengapa sizeof (int) tidak int adalah * Ary??

Q2)
Ketika ini ....
if (! Ary)
(
printf ( "calloc gagal \ n");
return;
)
akan terjadi??Apakah mungkin terjadi ....

echo47 wrote:

and not something.cpp
.
Pastikan Anda telah bernama something.c
berkas sumber anda dan tidak something.cpp.

 
instead of sizeof(int)
.

Q1: Pertanyaan Anda tidak jelas, tapi saya rasa Anda bertanya mengapa saya menulis sizeof (* Ary)
bukan sizeof (int).is better because if you someday change Ary
from int*
to a larger or smaller type such as double*
, then sizeof(*Ary)
will still be correct.

Keduanya benar, tetapi sizeof (* Ary)
adalah lebih baik karena jika Anda mengubah suatu hari dari int * Ary
yang lebih besar atau lebih kecil, seperti jenis ganda *,
kemudian sizeof (* Ary)
akan tetap benar.

Q2: jika calloc atau malloc gagal, biasanya karena komputer Anda telah kehabisan memori.Jika program Anda gagal untuk mendeteksi kesalahan, dan mencoba untuk menggunakan array, program mungkin akan crash.Itu bug yang umum di banyak program.

Anda harus cari kompiler perpustakaan Anda referensi manual (atau buku C yang baik) untuk deskripsi penuh calloc, malloc, bebas, dan fungsi alokasi memori lainnya.

 
Hai,

Sekarang saya mengerti kode yang sudah ...Thank you very much ....

Apakah Anda punya ide ...if i menerapkan kode ini di Keil Compiler untuk UC.Aku mencoba sudah tapi punya worning sana ....Di bawah kode yang sama yang kau memberiku (hanya int * Ary; ubah ke int xdata * Ary; di Keil compiler)Peringatan Tampilan:

Peringatan: Modul Nama Tidak Unik
Modul: C: \ Keil \ C51 \ LIB \ C51s.LIB (CALLOC)

Peringatan: teresolve Eksternal Olahraga
Simbol: _CALLOC
Modul: calloc.obj (CALLOC)

Peringatan: Referensi Made to teresolve Eksternal
Simbol: _CALLOC
Modul: calloc.obj (CALLOC)Kode:

# include <stdlib.h>

# include <stdio.h>

# include "reg52.h"void tst_calloc (const int ukuran)

(

int xdata * Ary;

int s = 2, n = 3;Ary = calloc (ukuran, sizeof (* Ary));if (! Ary)

(

return;

)Ary = n;/ / Free (Ary);

)void main (void)

(

while (1)

(

tst_calloc (100);

))
 
Jawabannya sederhana.Anda tidak memiliki calloc di perpustakaan yang dicari ketika membangun program Anda.Periksa manual dan melihat mana perpustakaan Anda harus menghubungkannya dengan program Anda untuk menyertakan calloc.Juga memperhatikan untuk tidak mengubah pointer Anda saat memanggil gratis atau program anda akan crash.

 

Welcome to EDABoard.com

Sponsor

Back
Top