malloc的用法和指针得数用法

先看一个   数组定义字符串

#include<stdio.h>
int main()
{
char s3[]="Hello World";
char* s;
s=s3;
printf("s3:0x%p\n",s3);
printf("s:0x%p\n",s);
s3[0]='B';
printf("%c\n",s3[0]);
printf("%s\n",s3);
printf("%s\n",s);
printf("%d\n",sizeof(s3));
}

结果为

s3:0x000000000000062FE00

s:0X000000000000062FE00

B

Bello World

Bello World

12

//%p是输出指针的地址,因为指向一样,所以地址一样

用数组定义字符串,字符串可写,这时s3[0]=‘B’,结果可以改变就叫做字符串可写。part1里的字符串不能改变,s3[0]='B’语句没有作用。
这里用数组定义字符串后,再用指针指向这个字符串,和part1相比,地址复杂了许多,说明这个地址不是临时地址了。
计算字符串长度12,Hello World+\0,\0也占有字符串的一位,但是不会显示出来。

那我要说的是第二种

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
    char *p;
    P=(char *)malloc(sizeof(char)*20);
    strcpy(p,"hello");
    printf("%s sizeof(p)=%zd\n",p,sizeof(p));
    free(p);
    return 0;
}

用了strcpy函数,思维很巧妙。

这里结果为8和输出途径为zd,这里我进行了查询,zd为输出指针大小的。

因为*p代表的结构体,int占用了4个字节,char1个字节,short是2个字节,所以是7个,但是根据自己对齐原理,必须是4的倍数所以补齐一个,变成8个

这里有个博主写的c语言如何使用指针 指向字符串,列举的例子都很棒,下面附上链接

 C语言如何用指针指向字符串?_耳朵用来听自己的心灵的博客-CSDN博客

 end

猜你喜欢

转载自blog.csdn.net/weixin_61847358/article/details/129960263