相关疑难解决方法(0)

sizeof(&array)返回什么?

问题是:为什么数组的地址等于它在C中的值?

#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

c string pointers sizeof

30
推荐指数
3
解决办法
2万
查看次数

在数组char指针的情况下,'数组名称'是什么意思?

在我的代码中:

 char *str[] = {"forgs", "do", "not", "die"};
 printf("%d %d", sizeof(str), sizeof(str[0]));  
Run Code Online (Sandbox Code Playgroud)

我得到了输出12 2,所以我怀疑是:

  1. 为什么会有区别?
  2. 这两个strstr[0]是字符指针,对不对?

c pointers sizeof

22
推荐指数
3
解决办法
4313
查看次数

为什么当我取消引用数组指针时,结果值是指向数组第一个元素的指针,而不是整个数组对象?

#include<iostream>

int num[3]={66,77,88};

int main()
{
    int(*pi)[3]=&num;
    std::cout<<*pi;
} 
Run Code Online (Sandbox Code Playgroud)

结果是地址而不是数组。这背后的解释是什么?

c++ arrays

14
推荐指数
1
解决办法
1405
查看次数

sizeof如何与对数组的指针取消引用一起工作?

在这里,我有一个指向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)

c arrays pointers

9
推荐指数
2
解决办法
120
查看次数

c/c ++指向数组的指针与指向指针的指针

我认为数组和指针基本上是一回事,直到我运行这个程序:

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

c c++ arrays pointers

0
推荐指数
1
解决办法
113
查看次数

C字符串长度

当我明确说明字符串的值,然后将其与自身进行比较时,系统返回FALSE.这是否与系统添加的额外'\ 0'字符有关?我应该如何优化我的代码使其成为正确的?

char name[5] = "hello";

if(name == "hello")
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

c arrays string char

0
推荐指数
1
解决办法
324
查看次数

C++字符串交换.它为什么有效?

基本上,复制字符串函数应该将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)

c++ string

-2
推荐指数
1
解决办法
303
查看次数

标签 统计

c ×5

arrays ×4

pointers ×4

c++ ×3

string ×3

sizeof ×2

char ×1