মানটি যখন আকারের অপারেটরে সরাসরি চলে যায় তখন কেন ডাটা টাইপের আকারের আকার আলাদা হয়?


15
#include <stdio.h>
int main() {
    char a = 'A';
    int b = 90000;
    float c = 6.5;
    printf("%d ",sizeof(6.5));
    printf("%d ",sizeof(90000));
    printf("%d ",sizeof('A'));
    printf("%d ",sizeof(c));
    printf("%d ",sizeof(b));
    printf("%d",sizeof(a));
    return 0;
}

আউটপুটটি হ'ল:

8 4 4 4 4 1

একই মানগুলির জন্য কেন আউটপুট আলাদা?


12
6.5ভাসা নয়, এটি একটিdouble
নাথানঅলিভার

printf("%d",sizeof(6.5f));এটি করা একটি float
জনি এমপ্প

2
"আউটপুট এখানে আলাদা কেন?" কেন একই হতে হবে? আপনি একে অপরকে নির্ধারণ করতে পারবেন তার অর্থ এই নয় যে তাদের ঠিক একই ধরণের রয়েছে।
স্লাভা

5
বিন্যাস নির্দিষ্টকরণকারক হওয়া উচিত, উদাহরণস্বরূপprintf("%zu", sizeof(6.5));
ওয়েদার ভ্যান

উত্তর:


9

সি এর অক্ষর ধ্রুবকের (সি ++ এর বিপরীতে) টাইপ রয়েছে int। সুতরাং এই কল

printf("%d",sizeof('A'));

ফলাফল 4. sizeof( 'A' )এটি সমান sizeof( int )

সি স্ট্যান্ডার্ড থেকে (6.4.4.4 অক্ষর ধ্রুবক)

10 একটি পূর্ণসংখ্যার চরিত্রের ধ্রুবকের টাইপ থাকে int ....

অন্যদিকে (6.5.3.4 আকার এবং alignof অপারেটর)

4 যখন আকার অপারেন্ডে প্রয়োগ করা হয় যেখানে টাইপ চর, স্বাক্ষরবিহীন চর, বা স্বাক্ষরিত চর, (বা এর কোয়ালিএড সংস্করণ) রয়েছে ফলাফল 1 হয়।

সুতরাং sizeofএই অভিব্যক্তিটির মধ্যে অপারেটরের অপারেন্ডের sizeof( 'A' )টাইপটি int থাকে যখন এই এক্সপ্রেশনটিতে sizeof( a )যেখানে একটির মতো ঘোষিত হয়

char a = 'A';

অপারেন্ড টাইপ আছে char

এই মত কলগুলিতে মনোযোগ দিন

printf("%d",sizeof(6.5));

ভুল রূপান্তর বিন্যাস নির্দিষ্টকরণ ব্যবহার করুন। আপনাকে লিখতে হবে

printf("%zu",sizeof(6.5));

উপরের কলটিতে doubleএই কলটিতে থাকাকালীন ধরণের ধ্রুবক ব্যবহৃত হয়

printf("%zu",sizeof(c));

ভেরিয়েবলের cটাইপ রয়েছে float

এই কলগুলির জন্য আপনি একই ফলাফলটি পেতে পারেন যদি প্রথম কলটি ধরণের ফ্লোটের মতো ধ্রুবক ব্যবহার করে

printf("%zu",sizeof(6.5f));

19

ভেরিয়েবলের মতো ধ্রুবকগুলির নিজস্ব ধরণের রয়েছে:

  • 6.5 : ধরণের ধরণের একটি ভাসমান বিন্দু double
  • 90000: ধরণের পূর্ণসংখ্যার ধরণ int(যদি int32 বিট হয়) বা long(যদি int16 বিট হয়)
  • 'A' : intসি এবং charসি ++ এ ধরণের একটি অক্ষর ধ্রুবক

যে আকারগুলি মুদ্রিত হয় তা হ'ল উপরের ধরণের আকার।

এছাড়াও, sizeofঅপারেটরের ফলাফলের ধরন রয়েছে size_t। সুতরাং প্রিন্ট করার সময় সঠিক বিন্যাস নির্দিষ্টকরণকারকটি ব্যবহার করার জন্য %zuনয় %d


1

কারণ মানগুলি কোনও বিষয় নয় sizeof। এটি ধরণের আকার।

  • চরিত্রের ধ্রুবকগুলি intএস, নয় char

  • ফ্লোটিং পয়েন্ট ধ্রুবক হয় ডিফল্টরূপে doubleগুলি যদি না আপনি তাদের সঙ্গে প্রত্যয় fবা l

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.