वाक्य रचना पैटर्न है कि सबसे सरल है:
int *p;
p = malloc (cnt * sizeof *p);
इस वाक्य रचना कोड बदलने के लिए आप के लिए मजबूर नहीं होगा यदि प्रकार (और या आकार ...) * पी परिवर्तन की, जैसे
में
struct mysstruct *q;
q = malloc (cnt * sizeof *q);
कौन से बचने जाएगा
struct mysstruct *z;
z = malloc (cnt * sizeof(struct hisstruct)); // Auch!
जैसी समस्याओं, प्लस: sizeof expr
रूप भी है है horter।
अद्यतन: p = malloc(CNT * sizeof *p)
की सत्यता को प्रदर्शित करने के लिए इस परीक्षण कार्यक्रम:
#include <stdio.h>
#include <stdlib.h>
struct mystruct {
int i;
char s[14];
};
int main(void)
{
struct mystruct *p;
size_t siz;
siz = sizeof p;
printf("Sizeof p := %zu\n", siz);
siz = sizeof *p;
printf("Sizeof *p := %zu\n", siz);
printf("Allocating %zu (%u structs, each of size %zu) bytes to be assigned to p...\n"
, 10u * sizeof *p
, 10u, sizeof *p
);
p = malloc(10 * sizeof *p);
return 0;
}
कौन सा यहाँ आउटपुट: अंतिम अनुच्छेद के लिए
Sizeof p := 8
Sizeof *p := 20
Allocating 200 (10 structs, each of size 20) bytes to be assigned to p...
+1 - मेरे अनुभव में हालांकि, कई सी प्रोग्रामर 'जानबूझकर' गलत काम करते हैं और यह काम करता है, इसलिए वे इसे जारी रखते हैं ..... – mattnz
आरई पहला अनुच्छेद: सी में, कई लोग तर्क देते हैं कि आपको इसे नहीं डालना चाहिए (एक अंतर्निहित बातचीत है 'शून्य *' से सी में किसी भी सूचक प्रकार से, तो यह काम करता है)। Http://stackoverflow.com/q/605845/395760 – delnan
देखें लोग धन्यवाद! – sabergeek