#include <stdio.h>
#define N 10
char str2[N]={"Hello"};
int main(){
printf("sizeof(str2): %d bytes\n", sizeof(str2));
printf("sizeof(&str2): %d bytes\n", sizeof(&str2));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
sizeof(str2): 10 bytes
sizeof(&str2): 4 bytes
Run Code Online (Sandbox Code Playgroud)
我知道str2单独是数组中第一个元素的地址str2.并且当str2它的参数何时sizeof返回整个数组str2的大小.
另外,&str2也是arr中第一个元素的地址,str2但是来自不同的类型(char (*)[N]==指向数组的指针).但是&str2当它是一个论证时,它是如何表现的sizeof?
在我的代码中:
char *str[] = {"forgs", "do", "not", "die"};
printf("%d %d", sizeof(str), sizeof(str[0]));
Run Code Online (Sandbox Code Playgroud)
我得到了输出12 2,所以我怀疑是:
str和str[0]是字符指针,对不对?#include<iostream>
int num[3]={66,77,88};
int main()
{
int(*pi)[3]=#
std::cout<<*pi;
}
Run Code Online (Sandbox Code Playgroud)
结果是地址而不是数组。这背后的解释是什么?
在这里,我有一个指向4个整数的ptr数组arr的指针。ptr指向整个数组。ptr[0]或*ptr指向数组的第一个元素,因此加1即可ptr[0]得出数组第二个元素的地址。
我不明白为什么使用sizeof(ptr[0])给出整个数组的大小16个字节,而不是第一个元素的大小4个字节(ptr[0]指向数组中第一个元素)。
int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16
Run Code Online (Sandbox Code Playgroud) 我认为数组和指针基本上是一回事,直到我运行这个程序:
int main() {
int* a = new int(19);
int b[1];
b[0] = 19;
printf("*a: %d\n a: %p\n &a:%p\n", *a, a, &a);
printf("*b: %d\n b: %p\n &b:%p\n", *b, b, &b);
delete a;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
*a: 19
a: 0x7f94524000e0
&a:0x7fff51b71ab8
*b: 19
b: 0x7fff51b71ab4
&b:0x7fff51b71ab4
Run Code Online (Sandbox Code Playgroud)
有谁可以解释为什么&b的输出与b相同?
谢谢!-Erben
当我明确说明字符串的值,然后将其与自身进行比较时,系统返回FALSE.这是否与系统添加的额外'\ 0'字符有关?我应该如何优化我的代码使其成为正确的?
char name[5] = "hello";
if(name == "hello")
{
...
}
Run Code Online (Sandbox Code Playgroud) 基本上,复制字符串函数应该将1个字符串复制到另一个字符串.这两个字符串的输出是Hello World!为什么这实际上有效,因为我只传递这些字符串的值?我不是通过参考或任何东西.
我的第二个问题是为什么我必须包含string.h而不是iostream.h?为什么.h部分只需要包含字符串头文件?为什么iostream如此特别,它不需要.h扩展名?
#include <iostream>
#include <string.h>
void copyString(char[] stringToCopyTo, char[] stringToCopy);
int main(){
char string1[] = "Hello World!";
char string2[80];
copyString(string2, string1);
std::cout << "String1: " << string1 << "\n";
std::cout << "String2: " << string2 << "\n";
return 0;
}
void copyString(char stringToCopyTo[], char stringToCopy[]){
stringToCopyTo = stringToCopy;
}
Run Code Online (Sandbox Code Playgroud)