这个指针想懂得一下
这个指针想了解一下#include iostream #include cstringusing namespace stdint main(){struct stu{i
这个指针想了解一下
#include <iostream >
#include <cstring>
using namespace std;
int main(){
struct stu{
int a;
char aa[6];};
stu*p;
p=NULL;
char*pp=p->aa;
return 0;
}
弱弱地问一下,把P弄空了,那p没有内存区指向了,那里面的东西会怎样的,我试过sizeof(p->a);是可以弄出几个字节的哦。 指针 内存 struct
[解决办法]p还是有指向内存空间的,只不过起始地址是0而已。
[解决办法]看样子您得好好学学 sizeof
紧记一点,它是个编译时行为。
[解决办法]sizeof 在编译时就被整数替换了,根本不管你指针是否指向合法内存
[解决办法]p->aa是未定义行为。
但sizeof( p->a )是合法的,因为sizeof是通过类型推断来计算内存布局的,p->a这个表达式并没有被实际求值。
[解决办法]因为putchar的返回值为int类型,cout输出时会运算符重载,所以能看到多了一个97
[解决办法]
#include <iostream >
#include <cstring>
using namespace std;
int main(){
struct stu{
int a;
char aa[6];};
stu*p;
p=NULL;
char*pp=p->aa;
return 0;
}
弱弱地问一下,把P弄空了,那p没有内存区指向了,那里面的东西会怎样的,我试过sizeof(p->a);是可以弄出几个字节的哦。
p->aa是未定义行为。
但sizeof( p->a )是合法的,因为sizeof是通过类型推断来计算内存布局的,p->a这个表达式并没有被实际求值。
#include<iostream>
using namespace std;
int main(){
struct student{
int a;//4个
char s[5];//5个
};
student st;
cout<<sizeof (st.a);
cout<<endl;
cout<<sizeof (struct student)<<endl;//12个
cout<<int (48)<<endl;
cout<<int ('m')<<endl;
char ch='a';
cout<<putchar(ch)<<endl;//这里输出的是a97,怎么多了个a
cout<<endl;
cout<<char(10);
char s[5]="niha";
cout<<s;cout<<endl;
strncpy(s,"cina",2);
cout<<s;
getchar();
getchar();
return 0;
}
因为putchar的返回值为int类型,cout输出时会运算符重载,所以能看到多了一个97
这里写错了,不好意思,不是运算符重载