#include<stdio.h>
#include<string.h>
int main()
{ char name[10] = "my-book";
char *str = name;
printf("%d,%d,%d,%d\n",sizeof(name),
strlen(name),sizeof(str),strlen(str));
return 0;
}
这个取决于你的编译器,在我这里因为是x64系统,所以输出
10,7,8,7
分别是数组长度,字符串长度,字符串指针长度,字符串长度
有的编译器第三个会输出4。
strlen() 是函数,sizeof 是运算符。
strlen 测量的是字符串的实际长度,以'\0' 结束(不包含'\0' )。
sizeof object; ==> sizeo f对象; sizeof计算对象的大小 。所以,sizeof(数组名),计算的是整个数组的大小,单位是字节。
sizeof(name) 得到字符数组 char name[10]; 的大小,代码里是 10。
strlen(name) 得到字符串的长度,"my-book" 共7个字符,strlen()函数取得字符串长度值为 7.
sizeof(str) ,因为 str 是指针变量,所以 sizeof(str) 得到指针变量的大小,32位系统为 4,64位系统为 8.
strlen(str) , strlen()函数得到 str 所指向的字符串 name = "my-book" 的长度,即为 7。
以上就是在用户态,内核态输出函数栈,以及由函数指针输出函数名的方法,在调试的过程中有时能帮助加深对代码的理解。
答案:
无代码,只是参考资料中给出了与指针相关的知识点,需要根据题目所给的代码来理解和解决问题。题目中给出的程序是调用一个函数,把一个整型变量的地址传递给该函数,在函数中通过指针改变了该变量的值,并输出结果。因此,程序的输出结果应该是100。
参考资料中给出了指针的四方面内容:指针的类型、指针所指向的类型、指针的值、指针本身所占据的内存区,需要根据程序中的变量和函数来判断涉及到的关键变量或操作:
因此,关键点在于理解指针和地址的概念,以及如何通过指针来改变变量的值。指针是一个变量,其值为一个内存地址,该地址指向一片内存区域。通过指针可以访问该内存区域并对其进行读写操作。在函数中,通过指针可以访问外部变量,并对其进行修改。
解决该问题的具体步骤如下:
具体代码如下:
#include <iostream>
using namespace std;
void f(int* p)
{
*p = 100;
}
int main()
{
int i = 9;
int* p = &i;
f(p);
cout << "i = " << i << endl;
return 0;
}