首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大小接受哪种类型的参数?

大小接受哪种类型的参数?
EN

Stack Overflow用户
提问于 2022-08-11 13:30:27
回答 4查看 111关注 0票数 0

我有以下代码:

代码语言:javascript
复制
void main(int argc, char *argv[]){
    for (int i=1; i<argc; i++){
        printf("%s-%lu\t", argv[i], sizeof(argv[i]));
    }
}

我希望$./a.out int long能给我

代码语言:javascript
复制
short-2 int-4 long-8 

但我却得到了

代码语言:javascript
复制
short-8 int-8 long-8

谁能告诉我原因吗?

EN

回答 4

Stack Overflow用户

发布于 2022-08-11 13:35:48

sizeof不是一个函数;它是一个运算符。

它给出对象、类型或常量表达式的大小。如果将类型作为字符串传递,它将不会给出类型的大小。

sizeof("long")将给出字符串文本"long"的大小(即5),而不是long类型的大小(例如8)。

由于argv是指向char的指针数组,sizeof(argv[j])将给出pointer to char的大小。

票数 6
EN

Stack Overflow用户

发布于 2022-08-11 14:17:58

大小接受什么类型的参数?

sizeof的操作数可以是表达式(特别是形式语法中的一元表达式),也可以是括号中的类型名称(按照C 2018 6.5.3 1 )。根据6.5.3.4 1,它不适用于:

  • 是具有函数类型的表达式(例如:sin),
  • 是具有不完全类型的表达式(例如:extern struct foo x;后的x,其中还没有定义struct foo )、

H 112不完全类型(例如:int []),或H 214H 115位字段成员。H 216f 217

对于sizeof(argv[i]),sizeof生成argv[i]的大小,它是指向char的指针。将sizeof应用于字符串不会产生字符串中命名的类型的大小(偶然情况除外);它根据表达式本身的类型产生其结果,而不是基于表达式的值或它指向或包含的任何内容。

票数 4
EN

Stack Overflow用户

发布于 2022-08-11 13:39:23

如果要将用户输入与"int""long"等进行比较,则需要手动进行。

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv) {
    if (argc < 2) exit(EXIT_FAILURE);
    if (strcmp(argv[1], "int") == 0) {
        int dummy = 42;
        printf("size of int is %zu\n", sizeof dummy);
    }
    if (strcmp(argv[1], "double") == 0) {
        printf("size of double is %zu\n", sizeof (double));
    }
    if (strcmp(argv[1], "long") == 0) {
        long int dummy = 42;
        printf("size of long is %zu\n", sizeof dummy);
    }
    return 0;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73321552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档