相关疑难解决方法(0)

在C中,是数组指针还是用作指针?

我的理解是数组只是指向一系列值的常量指针,当你在C中声明一个数组时,你就是声明一个指针并为它所指向的序列分配空间.

但这让我感到困惑:以下代码:

char y[20];
char *z = y;

printf("y size is %lu\n", sizeof(y));
printf("y is %p\n", y);
printf("z size is %lu\n", sizeof(z));
printf("z is %p\n", z);
Run Code Online (Sandbox Code Playgroud)

使用Apple GCC编译时会得到以下结果:

y size is 20
y is 0x7fff5fbff930
z size is 8
z is 0x7fff5fbff930
Run Code Online (Sandbox Code Playgroud)

(我的机器是64位,指针长8个字节).

如果'y'是常量指针,为什么它的大小为20,就像它指向的值序列一样?变量名'y'是否在编译时被内存地址替换为适当的?那么数组是C中的某种语法糖,它在编译时只是转换为指针的东西吗?

c arrays pointers

45
推荐指数
3
解决办法
1万
查看次数

如何将多维C数组传递给函数?

我正在学习大学课程中的C和指针,我认为除了多维数组和指针之间的相似性之外,我对这个概念有很好的把握.

我认为,因为所有数组(甚至是多维数组)都存储在连续的内存中,你可以安全地将其转换为a int*(假设给定的数组是int[].)但是,我的教授说定义中的星数取决于数字数组中的维度.所以,一个int[]会变成一个int*,一个int[][]会成为一个int**,等等.

所以我写了一个小程序来测试这个:

void foo(int** ptr)
{    
}

void bar(int* ptr)
{    
}

int main()
{
    int arr[3][4];

    foo(arr);
    bar(arr);
}
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,编译器在两个函数调用上发出警告.

main.c:22:9: warning: incompatible pointer types passing 'int [3][4]' to parameter of type
      'int **' [-Wincompatible-pointer-types]
    foo(arr);
        ^~~
main.c:8:16: note: passing argument to parameter 'ptr' here
void foo(int** ptr)
         ^
main.c:23:9: warning: incompatible pointer types passing 'int [3][4]' to parameter of type
      'int *' [-Wincompatible-pointer-types] …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers multidimensional-array

3
推荐指数
1
解决办法
2659
查看次数

C语言中数组,数组和&array [0]之间有什么区别?

我在C语言中学习数组和指针时感到困惑,为什么ch,&ch,&ch [0]恰好彼此相等,而sptr,&sptr和sptr [0]不是?这是我的源代码:

int main(void)
    {
        char ch[7] = { '1','2','3','4','5','6','0' };
        char *sptr = "132456";
        double db[4] = { 1.0,2.0,3.0,4.0 };
        printf("\n%p  %p  %p\n", ch, &ch,&ch[0]);
        printf("\n%p  %p  %p\n", sptr, &sptr,&sptr[0]);
        printf("\n%p  %p  %p\n", db, &db,&db[0]);
        return 0;

    }
Run Code Online (Sandbox Code Playgroud)

我机器上的输入是:

00FDFD68  00FDFD68  00FDFD68

00037CD0  00FDFD5C  00037CD0

00FDFD34  00FDFD34  00FDFD34
Run Code Online (Sandbox Code Playgroud)

c arrays pointers

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

标签 统计

arrays ×3

c ×3

pointers ×3

multidimensional-array ×1