gpt4 book ai didi

c - 以下 C 中的声明之间有什么区别?

转载 作者:行者123 更新时间:2023-12-01 14:02:22 28 4
gpt4 key购买 nike

这两个声明有什么区别:

char (*ptr)[N];

对比

char ptr[][N];

谢谢。

最佳答案

(1)声明

char (*ptr)[N];

ptr指向大小为 N 的字符数组的指针 下面的代码将帮助您了解如何使用它:

#include<stdio.h>
#define N 10
int main(){
char array[N] = "yourname?";
char (*ptr)[N] = &array;
int i=0;
while((*ptr)[i])
printf("%c",(*ptr)[i++]);
}

输出:

yourname?  

参见:Codepad

(2.A)

如果 char ptr[][N]; 是一个无效的表达式,则会给出错误:'ptr' 中缺少数组大小

但是 char ptr[][2] = {2,3,4,5}; 是一个有效的二维字符数组声明。下面的例子:

int ptr[][3] = {{1,2,3,4,5}, {5,6,7,8,9}, {6,5,4,3,2}};

创建一个 3 行 5 列的整数数组Codepade-Example

(2.B) 函数参数的特例!

作为函数参数 char ptr[][N]; 是一个有效的表达式。这意味着 ptr 可以指向一个 N 列的二维字符数组

示例:读取输出中的注释

#include <stdio.h>
int fun(char arr[][5]){
printf("sizeof arr is %d bytes\n", (int)sizeof arr);
}
int main(void) {
char arr[][6] = {{'a','b'}, {'c','d'}, {'d','e'}};
printf("sizeof arr is %d bytes\n", (int)sizeof arr);
printf("number of elements: %d\n", (int)(sizeof arr/sizeof arr[0]));
fun(arr);
return 0;
}

输出:

sizeof arr is 6 bytes   // 6 byte an Array 2*3 = 6
number of elements: 3 // 3 rows
sizeof arr is 4 bytes // pointer of char 4 bytes

查看此示例运行:codepad

关于c - 以下 C 中的声明之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15157133/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com