c and pointer : chp8

#include <stdio.h>

int main()
{
    char *str = "helloworld";
    char str2[] = "helloworld";
    int arr[10];

    printf("char * str: %lu\n", sizeof(str));
    printf("char str2[]:%lu\n", sizeof(str2));
    printf("int arr[10]:%lu\n", sizeof(arr));
    printf("int arr[10] len:%lu\n", sizeof(arr)/sizeof(arr[0]));
    printf("char * str:%p\n", str);
    printf("char str2[]:%p\n", str2);
}


输出:

char * str: 4
char str2[]:11
int arr[10]:40
int arr[10] len:10
char * str:0x8048544
char str2[]:0xbf8be081

注意: sizeof(str)输出的是一个指针占用的空间

sizeof(str2) 输出的数组大小(包含'\0')

可以这样理解:

char *str = "xxxxxxxx" 是定义了一个指针变量,它指向一个字符串常量。

而 char str2[] = "xxxxxxx" 是定义了一个字符串数组,没有写数组大小是为了简便罢了。

所以sizeof(str) 与 sizeof(str2) 是不同的。


但是在参数传递的时候,char *p 与char p[] 作用是一样的。

你可能感兴趣的:(c and pointer : chp8)