#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或C++中是否存在锯齿状数组?
当我编译这个:
int jagged[][] = { {0,1}, {1,2,3} };
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
错误:声明`jagged'作为多维数组必须具有除第一个之外的所有维度的边界
我很难理解C中数组名称的类型和用法.这可能看起来很长,但请耐心等待.
我理解以下语句声明a是类型,int []即整数数组.
int a[30];
Run Code Online (Sandbox Code Playgroud)
同时a也指出数组的第一个元素和类似*(a+2)的东西是有效的.因此,a看起来像一个指向整数的指针.但实际上类型int []和int*不同; 前者是数组类型,后来是指向整数的 指针.
类型int []变量int*在传递给函数时也会转换为类型变量; 因为C数组是通过引用传递的(sizeof运算符除外).
这就是让我垂涎的观点.看看下面这段代码:
int main()
{
int (*p)[3];
int a[3] = { 5, 4, 6 };
p = &a;
printf("a:%d\t&a:%d\n",a,&a);
printf("%d",*(*p + 2));
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
a:2686720 &a:2686720
6
Run Code Online (Sandbox Code Playgroud)
那么,上面的代码是如何工作的呢?我有两个问题:
a并&a具有相同的值.为什么?int (*p)[3];做什么的?它声明了一个 …在我的代码中:
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]是字符指针,对不对?对于以下代码:
int (*ptr)[10];
int a[10]={99,1,2,3,4,5,6,7,8,9};
ptr=&a;
printf("%d",(*ptr)[1]);
Run Code Online (Sandbox Code Playgroud)
它应该打印什么?我期待这里的垃圾值,但输出是1.
(我为此得出结论,初始化这种方式指针数组即ptr[10]开始指向a[10]按顺序排列的元素).
但是这个代码片段呢:
int *ptr[10];
int a[10]={0,1,2,3,4,5,6,7,8,9};
*ptr=a;
printf("%d",*ptr[1]);
Run Code Online (Sandbox Code Playgroud)
它给出了分段错误.
请考虑以下代码:
#include <stdio.h>
#include <stdlib.h>
#define NUM_ARRAYS 4
#define NUM_ELEMENTS 4
#define INVALID_VAL -1
int main()
{
int index = INVALID_VAL;
int array_index = INVALID_VAL;
int **ptr = NULL;
ptr = malloc(sizeof(int*)*NUM_ARRAYS);
if (!ptr)
{
printf ("\nMemory Allocation Failure !\n\n");
exit (EXIT_FAILURE);
}
for (index=0; index<NUM_ARRAYS; index++)
{
*(ptr+index) = malloc(sizeof(int)*NUM_ELEMENTS);
if (!*(ptr+index))
{
printf ("\nMemory Allocation Failure !\n");
exit (EXIT_FAILURE);
}
}
/* Fill Elements Into This 2-D Array */
for (index=0; index<NUM_ARRAYS; index++)
{
for (array_index = 0; …Run Code Online (Sandbox Code Playgroud) 我最近开始编程C只是为了好玩.我在一个非常熟练的程序员C# .NET和Java台式机领域内,但这是谈到了是有点太多对我来说是挑战.
我试图做一些"简单"的事情,如从函数返回一个二维数组.我已经尝试过在网上进行研究,但我很难找到有用的东西.
这是我到目前为止所拥有的.它没有完全返回数组,它只填充一个.但即使这样也无法编译(我相信如果你是一名熟练的C程序员,原因必须是显而易见的).
void new_array (int x[n][n]) {
int i,o;
for (i=0; i<n; i++) {
for (o=0; o<n; o++) {
x[i][o]=(rand() % n)-n/2;
}
}
return x;
}
Run Code Online (Sandbox Code Playgroud)
用法:
int x[n][n];
new_array(x);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?应该提到的n是具有该值的常量3.
编辑:尝试定义常量时,这是一个编译器错误:http://i.imgur.com/sa4JkXs.png
int matrix[9][9],*p;
p=matrix[0];
Run Code Online (Sandbox Code Playgroud)
这工作并给出了第一行matrix,但如何获得matrix我试过的第一列p=matrix[][0]; ?另外我不明白为什么下面的代码会出现编译错误?
int matrix[9][9],p[9]; // it looks really ugly, byt why it doesn't work ?
p=matrix[0]; // compiler gives "invalid array assigment"
Run Code Online (Sandbox Code Playgroud)
是因为多维数组是数组的数组 - 我们应该解释matrix[i][j]为第i个嵌套数组的第j个元素?
我正在测试sizeof运算符。在我的代码中的两种情况下,我得到了指针的大小(我认为)。在其他情况下,我得到数组占用的字节数。 将数组传递给函数时,如何以字节为单位获取数组的大小? 不是的sizeof操作符就够了吗?难道我做错了什么?
#include <stdio.h>
/*Testing the operator sizeof*/
void test (char arrayT[]);
void test2 (char *arrayU);
int main(int argc, char *argv[]){
char array1[7];
printf("array1 size is:%d\n", sizeof array1);
/*array1 size is: 7*/
char array2[] = { '1', '2', '3', '4', '5', '6', '7'};
printf("array2 size is:%d\n", sizeof array2);
/*array2 size is: 7*/
char array3[] = "123456";
printf("array3 size is:%d\n", sizeof array3);
/*array3 size is: 7*/
unsigned char array4[] = …Run Code Online (Sandbox Code Playgroud) 我认为以下代码是正确的,但它不起作用.
int x, *ra;
&ra = x;
Run Code Online (Sandbox Code Playgroud)
和
int x, ra;
&ra = x;
Run Code Online (Sandbox Code Playgroud)
如果这两个代码段都正确,请帮助我.如果没有,你在他们身上看到了什么错误?