对于sizeof的字符数组

为什么我得到的结果6,然后用8从下面的代码? 我寻遍职位,但找不到我的问题完全匹配。 谢谢。

#include <stdio.h> void getSize(const char *str) { printf("%d\n", sizeof(str)/sizeof(char)); } int main() { char str[]="hello"; printf("%d\n", sizeof(str)/sizeof(char)); getSize(str); }

--------------解决方案-------------

在你getSize()函数, str是一个指针。 因此sizeof(str) 返回一个指针的大小。 (这是在这种情况下,8字节)

在你main()函数, str是一个数组。 因此sizeof(str) 返回数组的大小。

这是数组和指针之间的微妙区别之一。

不同类型的,不同的大小。

mainstr是一个char[6]getSize str ​​是const char * 。 指针是(在64位平台上)8个字节,所以(假设sizeof(char) = 1 ):

6/1 = 6
8/1 = 8

分类:C# 时间:2012-01-01 人气:0
本文关键词: 数组,sizeof的,性格
分享到:

相关文章

  • 对于字符数组SizeOf函数工作 2013-07-18

    void main() { char s[]="\12345s\n"; printf("%d",sizeof(s)); } 当我编译它,它给6.我不是歌厅为什么它是给6 8.喜欢insted的{'\1','2','3','4','5','s','\n'} 请有谁能够告诉其原因,我想一些深层次的和明确的解释. 我会很感激他们. --------------解决方案------------- 由于\123被认为是一个字符,它是一个转义序列(八进制). 这样sizeof算

  • intializing用memset一个结构数组 2012-07-23

    GCC 4.4.4 C89 我有以下的结构. struct device_sys { char device[STRING_SIZE]; int id; char category; }; int main(void) { struct device_sys dev_sys[NUM_DEVICES]; memset(dev_sys, 0, (size_t)NUM_DEVICES * sizeof(dev_sys)); return 0; } 我得到一个堆栈转储当我叫memset的. 这难道不是来

  • 这可能吗? [字符指针数组℃] 2013-09-10

    这可能吗? size_t calculate(char *s) { // I would like to return 64 } int main() { char s[64]; printf("%d", calculate(s)); return 0; } 我想写这计算中声明的字符数组的大小函数main() . --------------解决方案------------- 你的函数calculate()只给定指针参数, s ,不能计算数组有多大. 该数组的大小未在指针编码,或从指针

  • 初始化数组以指针传递 2014-08-22

    因为该功能不能初始化数组sizeof()返回一个字节int pointer没有大小由所指向的内存myArray . void assignArray(int *myArray) { for(int k = 0; k < sizeof(myArray); ++k) { myArray[k] = k; } } 是否还有其他问题? 谢谢 --------------解决方案------------- 我看不出其他问题. 不过,你可能想要这个: template<int sz> void ass

  • 如何哈希和比较一个指针到成员函数? 2012-05-13

    我怎样才能哈希(标准:: TR1 ::哈希或升压::哈希)C ++的指针到成员函数? 例: 我有几个布尔(类:: * functionPointer)()(不是静态),其指向Class类的几种diferent方法,我需要这些哈希指针到成员函数. 我怎样才能做到这一点? 另外我如何可以比较(STD ::以下)的成员函数指针,所以我可以将它们存储在一个std ::设置? --------------解决方案------------- 所有的C ++对象,其中包括指向成员函数,在内存中表示为字符数组.

  • C语言中:动态分配的对象为什么会返回一个指针,而静态分配的对象给你一个选择? 2013-05-05

    这实际上是一个比我在这里问过(任何谁在乎)一个更简洁,更清晰的问题:C语言:为什么malloc()函数返回一个指针,而不是价值? (对不起,那些谁最初认为我是垃圾邮件......我希望,因为我觉得我的话来说存在的方式使其无意误导它没有解释为同样的问题) - >基本上我想要问的是:为什么一个C程序员需要一个指向一个动态分配的变量/对象吗? (无论差为变量/对象之间...) 如果一个C程序员创建只是'INT X"或只是选项'诠释* X'(均为静态分配的),那么为什么他不能也只是他的初始化动态分

  • 的memcpy(),我应该尺寸参数的值是什么? 2013-07-23

    我想一个int数组复制到另外一个int数组. 它们使用相同的定义长度,因此他们将永远是相同的长度. 什么是尺寸参数如下两种选择的利弊/缺点,memcpy()函数? memcpy(dst, src, ARRAY_LENGTH*sizeof(int)); 要么 memcpy(dst, src, sizeof(dst)); 请问第二个选项总是工作? 不管所述内容的? 有一件事,有利于最后一个是,如果数组要改变,这将是一些持家更新的memcpy()的. 谢谢 --------------解决方案----

  • SIZEOF在C编程语言中数组? 2012-01-16

    为什么不是一个数组的大小作为参数发送相同的内主? #include <stdio.h> void PrintSize(int p_someArray[10]); int main () { int myArray[10]; printf("%d\n", sizeof(myArray)); /* As expected, 40 */ PrintSize(myArray);/* Prints 4, not 40 */ } void PrintSize(int p_someArr

  • sizeof的数组作为参数传递 2012-01-16

    考虑下面的程序, #include <iostream> using namespace std; void foo( char a[100] ) { cout << "foo() " << sizeof( a ) << endl; } int main() { char bar[100] = { 0 }; cout << "main() " << sizeof( bar ) <<

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.471 (s). 10 q(s)