数组名,指针

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int main(){
       char str[100] = "hello\0world";
       printf("str= %s",str);
       scanf("%s",str);//人工输入
       cout<<"str two:"<<str<<endl;
       return 0;
}

结果:str= hello
hello\0world(人工输入内容)
str two:hello\0world

结果分析:因为在输入的时候“\0"占用的是两个字符,str[5] = ‘’,str[6]=‘0’;所以第二次输出的结果是”hello\0world“

#include <iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int main(){
       char * str = "hello world!";//新一代的编译不能通过,因为“hello world”在常量区,他属于不可以改变的区域
       char st[6] = "hello"//而数组是将"hello world" 拷贝一份到栈区,而st的就是这个字符串的首地址。
        *(st+1) = 'i';//正确,是因为str在栈区分配的空间,可以修改的。
        *(str+1) = 'i';//错误,因为str指向的是一个常量区,他的内容是不可以改变的。 数组名是一个常量指针,是不可以被"++"或“--”(这里没有出现)
        str = st;//这是可以的,因为指针之间是可以相互的赋值。
       printf("str:%s,st:%s",str,st);
       return 0;
}

1.数组名代表了一个指向数组首元素的常量指针,一经定义,不可更改,数组名作为常量指针,其类型与数组元素类型相同。指针是变量指针,定义之后仍可更改,其类型在定义时确定。
2.当出现sizeof,和&操作符时,str为数组首元素的地址&str表示数组的地址(上升到了一个数组为整体),数组名不再当成指向一个元素的常量指针来使用(而是作为一个数组来使用),而指针仍当成指向一个元素的变量指针来使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值